2017-01-12 21 views
1

私はjavascriptで1ページのウェブサイトを持っています。 2つの同時接続/要求ロック

は、httpリクエストの3種類ごとに30秒 /action/status/要求がサーバーに送信され、サーバ

/action/status/ 
/action/csv_process/ 
/action/status_pid/ 

に送信されたすべてのものを簡単にするために。要求にはあまり起こりません。以下では、リクエストで実行されたmysqlクエリの書き込みをすべて見ることができます。

2017-01-12 18:37:03 2 --- REQUEST START: action status 
2017-01-12 18:37:03 2 UPDATE `log_login` SET time_active=1387 WHERE id=78360 
2017-01-12 18:37:03 2 BEGIN 
2017-01-12 18:37:03 2 COMMIT 
2017-01-12 18:37:03 2 --- REQUEST END 0.076473951339722 

ユーザはCSVファイルをアップロードできます。ファイルがアップロードされると、ユーザーはファイルの処理方法を選択できます。次の/action/csv_process/リクエストは完了するまでに時間がかかることが多いので、/action/status_pid/要求が3秒ごとにサーバーに送信され、パーセント(0-100)で進行します。

すべて正常です。 /action/status_pid/要求は3秒間隔で実行し、/action/csv_process/が処理している間、応答を返しますが、できるだけ早く/action/status//action/csv_process/まで、サーバーのすべてのロックに送られて、なぜ/action/status/がすべてをロックしている

を完了していますか?

すべての要求は、MySQLのトランザクションで実行され、すべてのテーブルがあるInnoDB

でも、現在の要求が完了するまで、私は待つべきすべての同時実行要求でsession_write_close()を使用していませんでした..しかし/action/status/がするまで保留された場合にかかわらず、データ処理要求が行われ、保留中の他のすべての要求がロックされます

+1

テーブルエンジンMyISAMまたはInnoDBはありますか?そして私は 'BEGIN'と' COMMIT'に続く 'UPDATE'を理解しませんでした。開始とコミットの間ではいけませんか? –

+0

すべてのテーブルはInnoDBです。はい、あなたはbegin/commitのクエリについて正しいです。 – clarkk

答えて

1

セッションを使用すると、セッションを解放するまで1つの要求をロックする可能性があります。セッションが不要になった後に電話をかける session_write_close

+0

私は '/ action/status /'で 'session_write_close'を使用しません。しかし、すべてを完全にロックしてはいけません。'/action/status/'はデータ処理要求が完了するまで保留中です。 – clarkk

+0

'/action/status/'が送信された後、データ処理が完了するまですべてが停止します。 – clarkk

+0

@clarkkしかし、応答が1つだけ送られるまで時間当たりのアクションが実行されます。残りはセッション記憶ロックの解放を待つでしょう –

関連する問題