2013-12-17 47 views
0

我有一個flex應用程序,需要多個和長的http請求才能從服務器獲取數據。在運行時期間,隨機的http請求會簡單地掛起。瀏覽器網絡面板顯示HTTP請求待處理,直到恰好五分鐘。在此期間,從同一瀏覽器會話向該主機名發出的任何請求根本不會加載(掛起)。瀏覽器掛起,直到取消HttpRequest後從服務器超時

我試着修改保持活動請求頭,但服務器響應似乎重置爲默認值,這只是5秒的任何方式。

我在超時指令下的apache conf中發現了300s的值。將超時從300更改爲30時,瀏覽器主機掛斷更改爲30秒。爲什麼即使在新選項卡中取消httpRequest後瀏覽器仍在等待超時消息?

我正在使用ustream.close()關閉actionscript urlstream。 urlstream重新初始化爲ustream = new URLStream()。在沒有關閉的情況下進行初始化時,先前的請求會完成,從而導致加載速度更慢並帶寬更高我擔心actionscript close()不能正確地關閉http請求,但它只發生了一些時間。

回答

1

罪魁禍首是php會話鎖。服務器調用的php文件用於從會話中獲取一些數據。 PHP使用會話鎖定來確保會話數據的一致性。因此,一次只有一個文件可以保持與服務器的開放連接。當urlstream從瀏覽器端關閉時,apache會處理下一個請求,但會一直等到上一個完成或超時。解決方案是確保在關閉流之前關閉php文件中的所有會話。

爲了進一步減少服務器開銷,我現在從GET參數傳遞一個密鑰,而不是維護會話。可以使用session_write_close來阻止會話鎖定。

我用mod_statusExtendedStatus Onthis blog

調試的幫助Apache進程