2009-04-30 61 views
0

這個問題是我以前的一個後續:Previous QuestionsAJAX(原型/ php)運行2 ajax進程掛起,直到第一個完成

因此,我設置我的頁面啓動ajax調用來啓動處理一些記錄。在每個記錄之後,它會更新另一個表中的一行以跟蹤此過程的狀態。在第一次ajax呼叫之後,我又開始了一次。它是一個Ajax.PeriodicalUpdater,它被設置爲打擊一個文件,該文件只是在數據庫中查詢該行並返回原始進程的狀態。

所以這工作得很好......只要提供狀態更新的文件在我目前的應用程序之外。如果我把這個文件放在我的應用程序中,那麼它就無法正常工作。如果我觀看螢火蟲,PeriodicalUpdater調用在返回原始ajax調用之前不會返回任何內容,它只是掛起,因此就好像文件已掛起而不返回任何內容。

這整個應用程序運行只是我們正在使用的基本框架。沒有什麼瘋狂的,只是處理路由和基本的模板方面等...所以所有這些函數/文件都在這個應用程序內,所有這些Ajax調用都通過這個路由。

什麼可能導致這樣的事情?

回答

1

這是否可以歸因於concurrent connections supported by a browser對特定域的限制?

+0

嗯,也許吧。我現在要仔細閱讀。但是它的工作實例,當我將文件移出我的應用程序時,它仍然位於同一臺服務器和同一個域中。 – 2009-04-30 04:49:59

+0

這似乎不是導致問題的原因。正如我所說的,當我將文件移出應用程序時,對於這只是在目錄下工作正常。當它在我的應用程序之外時,我能夠打開3個到文件的ajax連接,並且工作正常。似乎是以某種方式與PHP和我們的應用程序,但我不知道什麼會導致服務器像這樣掛起。 – 2009-04-30 05:09:35

1

這是PHP會話序列化造成的。會話數據被鎖定,直到每個請求的PHP進程完成寫入,因此同一會話中的進一步請求將排隊,直到釋放鎖。

如果您的AJAX請求需要訪問會話狀態,請在您的代碼中儘早讀出所需信息,然後使用session_write_close()來釋放這些鎖。