我有一個JavaScript的Web應用程序設置爲使用長輪詢與.NET服務器發送,使用Ajax調用:AJAX長輪詢不從瀏覽器
var _listenTimeout = 5 * 60 * 1000;
//...
$.ajax({
type: "GET",
url: url,
async: true,
cache: false,
dataType: "jsonp",
timeout: _listenTimeout,
success: callback
});
然而,有一個問題,當頁面已經打開了一段時間,對服務器的請求停止響應。它似乎處於一種緩衝狀態,數據包在Web瀏覽器之間卡住,並從網絡發送到服務器。
我周圍挖,我知道一兩件事情:
- 請求被髮送,因爲它表明了Chrome網上應用開發者網絡選項卡上(也鉻://網內部)和螢火蟲。請求的狀態始終處於待處理狀態,並且僅在該狀態下停止。
- 請求網址是正確的,因爲通過
curl
發送相同的網址會立即返回響應。 - 它還沒有離開我的網絡,因爲沒有使用wireshark檢測到任何數據包。服務器日誌(和那邊的wireshark)也不顯示任何內容。
奇怪的是,有時工作斷斷續續,但一兩分鐘即的延遲,瀏覽器網絡日誌檢測該請求得到響應(在我的情況下,204),和Wireshark檢測該請求正在發送(並在服務器端收到)。瀏覽器和wireshark的延遲是相同的,即發出請求,發生延遲,然後chrome檢測到響應,wirehare檢測到發送的數據包。
頁面的全新刷新也解決了問題,幾乎立即發生相同的請求/響應(使用相關的瀏覽器網絡和wireshark日誌)。
我已經在Chrome 21.0.1180.89和Firefox 14.01上試過了。
是否有某種瀏覽器隊列在瀏覽器中被ajax請求阻塞?或者也許too many concurrent requests?現在不知道...
'chrome:// net-internals'存在多久了?太棒了**! – Neal
你能詳細說一下嗎? Chrome顯示請求正在被創建,但你從字面上沒有得到任何迴應......就像沒有標題或任何東西一樣?但是連接成功了? Wireshark根本沒有顯示數據包,或只是不顯示你期望看到的內容?你可以在錯誤的界面上嗅探嗎? – Brad
@Brad - 更新了更多細節的問題。希望他們回答你的所有問題,即wireshark在乾淨的頁面刷新上檢測到相同的URL請求。 – zlog