[英]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.