簡體   English   中英

長輪詢:我如何讓它平靜下來?

[英]Long Polling: How do I calm it down?

我正在一個函數中進行一個簡單的聊天,該函數具有ajax調用,該調用會調用setTimeout在成功時調用自身。 這每30秒左右運行一次。 效果很好,但是我想在收到消息時立即發出通知。 我看到了很多使用jQuery代碼進行長時間輪詢的示例,如下所示:

function poll()
{
    $.ajax(
    {
        data:{"foo":"bar"},
        url:"webservice.do",
        success:function(msg)
        {
           doSomething(msg);
        },
        complete:poll
    });
}

我了解這是如何工作的,但是這只會保持立即反復向服務器發送請求。 在我看來,服務器上需要有一些邏輯,這些邏輯將一直持續到發生某些更改為止,否則即使沒有什么要報告的內容,也會立即將響應發送回去。 這是純粹用javascript處理還是我缺少要在服務器端實現的功能? 如果在服務器上處理,暫停服務器執行真的是個好主意嗎? 根據您的所有經驗,有什么更好的方法來處理此問題? 我的setTimeout()方法是否足夠,也許只是一個較小的超時?

我了解websocket,但是由於尚未得到廣泛的支持,因此我想堅持使用最新技術。

不要暫停服務器的執行...如果很多人嘗試聊天,這將導致服務器資源枯竭...

與使用setTimeout一樣,使用客戶端來管理暫停時間,但延遲較低

你錯過了“長輪詢” 的部分。 除非有一些有趣的事情要說,否則服務器端不可以返回。 請參閱本文以獲取更多討論。

您已經確定了要權衡的,與Web服務器的開放連接,因此消耗了http連接(即,響應必須阻止服務器端)與頻繁的“是否有任何新的”請求,從而消耗了帶寬。 如果您的瀏覽器可以支持WebSocket,則可以選擇使用WebSocket(大多數“現代”瀏覽器http://caniuse.com/websockets

沒有通過傳統的Ajax輪詢在javascript端處理此問題的適當方法,因為如果您希望限制發出的請求量,則一端總是會滯后。 看一看基於nodeJS的解決方案,甚至看一看基於PHP的Ajax Push Engine www.ape-project.org。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM