2011-09-19 57 views
2

我在運行Flash套接字和使用Ajax加載頁面時遇到問題。兩者都單獨工作。我能夠使用Ajax調用瀏覽我的網站,或者我可以通過套接字發送/接收消息。Ajax呼叫在連接到Flash插座時排隊

但是,當由於某種原因連接套接字時,Ajax調用開始似乎被放入隊列中,直到我停止套接字時纔開始實際完成。如果我從套接字斷開連接,或關閉服務器端的套接字,則Ajax調用立即完成並加載頁面。 Ajax調用永遠不會超時,直到我關閉套接字連接爲止。

在JavaScript中,我使用jQuery的$.getJSON()函數來加載頁面(我認爲這是異步調用)。

在Flash中,我使用的是基本的ActionScript 3 Socket類:

this._socket = new Socket(); 
this._socket.addEventListener(Event.CONNECT, onConnectHandler); 
this._socket.addEventListener(Event.CLOSE, onCloseHandler); 
this._socket.addEventListener(IOErrorEvent.IO_ERROR, onIOErrorHandler); 
this._socket.addEventListener(ProgressEvent.SOCKET_DATA, onDataHandler); 
this._socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityErrorHandler); 

編輯:

我驗證過沒有 HTTP請求正在取得進展。事實上,由於某種原因,瀏覽器正在排隊。我還注意到,它不僅會排隊Ajax請求,還會排隊刷新瀏覽器。如果我點擊刷新按鈕,它也會永久掛起。

編輯2:

其實,我被檢查的80端口時,我應該已經檢查端口443上有實際的請求正在向服務器發出,它只是掛了一些原因。這導致我相信,使用PHP的套接字(使用PHP)會使PHP處理器排隊請求,或者Apache正在排隊請求,因爲它看到套接字正在使用PHP。我仍然不確定爲什麼在處理程序關閉之前沒有完成對PHP處理器的附加請求,但是我確信它與PHP套接字始終處於打開狀態有關,阻止其他請求。

回答

0

顯然這個問題是由於瀏覽器實現的2限制連接。由於套接字使用到主機的持久連接之一,所以其餘的HTTP請求會變成瓶頸。

的問題和解決方案描述here

...如果瀏覽器打算的 連接數限制爲單個主機的回答很乾脆到 欺騙瀏覽器以爲它正在與多個主持人談話。結果如下: 這樣做很簡單:只需將同一個 主機的多個CNAME添加到DNS,然後將這些主機引用爲頁面中某些 對象的主機。