2012-05-11 49 views
1

我使用長輪詢AJAX和Apache/PHP實現Comet。問題是,如果在一段時間內(我未知)沒有交互,即沒有數據發送/接收,然後過了一段時間,我發送一個事件,客戶端長輪詢請求保持掛起而沒有接收新數據。有時客戶端會收到超時並重新連接,但有時它不會收到任何內容,正如我已經說過的那樣,請求會一直處於等待狀態。 我按照here的規定實施它,其中一些變化與彗星實現本身無關(即:使用數據庫而不是文件)。它在服務器端使用一個等待新事件的循環,似乎服務器超時關閉連接,但客戶端不接收關閉連接以重新連接。 我該如何避免這個問題?該解決方案是否使用客戶端計時器重新連接?使用AJAX和PHP實現Comet實現(在Apache上)drop connections

回答

1

您需要等待超過50秒才能發送回覆,否則瀏覽器可能會超時。基本上如果在50秒後沒有新的報告,反正發送迴應。這個空的響應將觸發客戶端發送一個新的請求到服務器並重新開始。

+0

問題是,當瀏覽器超時時,它會關閉請求。這樣,我在JavaScript中的comet對象就會向服務器發送另一個事件請求。但是這種情況似乎有一些東西在服務器端關閉請求,而客戶端仍在等待響應。 –

+0

@GarciaWebDev衆所周知,不應該讓請求超過50秒。試試看,你會看到它的作品。 – dqhendricks

+0

我放了30秒的超時時間,工作正常。選擇數字50秒的任何特定原因?這是一個慣例嗎? 50秒是多少安全? –