2010-12-14 4 views
0

私は、(fsockopenを使用して)ソケット接続を開き、結果をブラウザに返すために約15秒かかるPHPスクリプトを持っています。ブラウザが2番目のリクエストを送信すると、それがシリアル化されます。ユーザーが3回クリックすると30秒後に送信される3番目のリクエストが応答を取得するため、これは悪いユーザーエクスペリエンスをもたらします。ブラウザからの最初の2つのリクエストが失われているためです。同じブラウザからのPHP同時TCP接続

私のスクリプトにはセッションがありませんが、私のスクリプトの最初にsession_write_close()を入れてみましたが、それは助けになりませんでした。

はまた、同じブラウザパラレルからクライアント要求を作成する方法のようにphp.ini = 0

に任意のアイデアをsession.auto_start?

おかげ ゲイリー

+0

これは、サーバー上のものではなく、クライアントからの接続をどのように開始するかについてです。これはPHPではなく、JavaScript/websocketsに関する質問です。 –

+0

stream_context_create()を使用しましたか?質問を編集し、問題の詳細を知るためにコード部分を追加してください。 – Manu

答えて

1

1)ダウンロードし、Firefoxの

2をインストールする)Firebugの

3をダウンロードしてインストールします。)それが戻る前に、数秒間一時停止するように、あなたのPHPスクリプトにsleep(10)を追加その応答

4)あなたのウェブページを開き、Firebugでアウトバウンド接続を見てください。開いていて、まだ応答がないものがいくつかあるはずです。彼らは、それぞれが10秒の遅延を終えるほぼ同時に戻ってくるはずです。

同時に複数の接続が開いていない場合でも、ほぼ同時に復帰する場合は、フロントエンドコードを確認する必要があります。 AJAXリクエストは非同期であり、並行して実行できます。代わりにシリアルで実行されている場合は、JavaScriptコードを修正する必要があることを意味し、サーバー上のものは修正しません。

Parallel asynchronous Ajax requests using jQuery

+0

私はwiresharkパケットを分析して、次のリクエストが前のリクエストからの応答を取得した後にのみブラウザから出ることを確認します。だから、これはクライアントの問題のようです。回答いただきありがとうございます。私はあなたの所見を私の所見に載せておきます。 – Gary

0

あなたが可能なすべての場合はインストールする必要があります(* NIX)redis。あなたが非同期的にこのようなものを処理し、そのまま秩序を維持することができますbrpop lpush /でちょうどんシンプル

make 

をインストールするには

。いくつかのワーカースレッドを生成すると、同時に複数の要求を処理することもできます。 predisクライアントライブラリはかなり安定しています

関連する問題