2010-12-14 59 views
0

我有一個PHP腳本,它打開一個套接字連接(使用fsockopen)並花費約15秒來完成/將結果返回給瀏覽器。同時,如果瀏覽器發送第二個請求,它將被序列化。這給用戶帶來了不好的體驗,因爲如果用戶點擊3次,那麼30秒後發送的第三個請求就是得到響應的請求 - 前兩個來自瀏覽器的請求正在丟失。來自同一瀏覽器的PHP同步TCP連接

我沒有在我的腳本中的任何會話,但嘗試把session_write_close()在我的腳本開始沒有幫助。

在php.ini另外session.auto_start = 0

任何想法如何使從瀏覽器平行同一客戶端的請求?

感謝 加里

+0

這是關於如何從客戶端發起連接,而不是您服務器上的連接。這是一個JavaScript/websockets問題,而不是PHP。 – 2010-12-14 05:25:38

+0

您使用了stream_context_create()嗎?編輯您的問題並添加一些代碼部分以獲得有關該問題的更多信息。 – Manu 2010-12-14 05:43:05

回答

1

1)下載並安裝Firefox

2)下載並安裝Firebug的

3)返回前幾秒鐘添加sleep(10)到你的PHP腳本,它會暫停其反應

4)打開你的網頁,並觀看與Firebug的出站連接。你應該看到幾個已經打開,但還沒有迴應。他們都應該幾乎同時返回,當每個人完成10秒延遲時。

如果您沒有看到同時打開多個連接,並且大致在同一時間返回,那麼您需要查看您的前端代碼。 AJAX請求是異步的並且可以並行運行。如果你看到他們連續運行,那麼這意味着你需要修正你的JavaScript代碼,而不是服務器上的任何東西。

Parallel asynchronous Ajax requests using jQuery

+0

我分析了wireshark數據包,發現下一個請求只有在收到前一個請求的響應後纔會從瀏覽器中消失。所以,這似乎是一個客戶問題。謝謝大家的回覆。我會隨時向你發佈我的發現。 – Gary 2010-12-14 15:04:40

0

你應該,如果在所有可能的安裝(* nix中)redis

要安裝只是做簡單的

make 

隨着LPUSH/brpop您可以異步處理這些東西,並保持順序不變。如果你產生了幾個工作線程,你甚至可以同時處理多個請求。 predis客戶端庫很穩固