jQuery LongPolling是一種通過輪詢技術實現消息實時推送的方案。在傳統的實時通信技術中,每次都需要直接連接服務器,會造成服務器壓力大,同時也會對客戶端造成瀏覽器緩存區的異常。而LongPolling技術的核心在于客戶端向服務器發送消息請求,服務器在收到請求后不立即返回結果,而是將請求掛起,等有數據更新時再返回響應,同時客戶端收到響應后再次向服務器發起請求,形成長輪詢。
$(document).ready(function(){
var since = 0;
var poll = function(){
$.ajax({
url: "/api/poll?since="+since,
success: function(data){
//處理返回的數據
since = data.timestamp;
},
complete: setTimeout(poll, 10000),
});
};
poll();
});
上面是一個LongPolling的基本實現,通過在客戶端使用ajax向服務器發送請求,然后在服務器側等待新數據的到來,當有新數據到來時,服務器再次對瀏覽器進行回應,客戶端重新發送請求,形成請求-響應機制。當數據沒有更新時,服務器就會掛起請求,控制器依然能夠保持與瀏覽器或其他客戶端的連接,隨時等待新數據的到來。
當然,在實際應用中,還需要考慮異常處理以及長輪詢的優化等問題。例如,為了防止服務器被阻塞而無法響應,通常會在發布者-訂閱者模式下實現消息發送,當有新的通知信息時,服務器只需要將信息放入消息池中,客戶端依然在間隔一段時間后發起請求查詢消息池中是否有新信息即可。
總之,LongPolling技術在實現實時通信的過程中比較方便,不需要客戶端持續不斷地向服務器發送請求,同時也可以避免服務器發生異常,對應用性能的影響也較小。但適用于場景比較受限,比較適用于一些局部需要實時推送的信息處理場景。