Comet是一種使用JavaScript技術通過HTTP連接實現服務器/客戶端實時通信的技術。一個普通的HTTP請求是客戶端向服務端發送一個請求,服務端處理并響應請求,這個過程完整了之后,客戶端和服務端就斷開了連接。Comet則不同,它通過保持HTTP連接不斷開,讓數據從服務端不斷向客戶端推送,實現了實時通信的效果。
Comet的實現方式有很多,其中最基本的一種方式是長輪詢(Long Polling)。下面來簡單介紹一下:
//服務端代碼 setInterval(function(){ var time = new Date().toTimeString(); sendMessage(time); }, 1000); function sendMessage(message){ //向客戶端發送推送信息 } //客戶端代碼 function receiveMessage(){ //進行長輪詢 }
上面是一個簡單的長輪詢實現,服務端每隔1秒向客戶端發送當前時間的信息。長輪詢的原理是客戶端向服務端發送一個請求,服務端處理請求會進入等待狀態,等待有新的數據時再把數據發送給客戶端,客戶端收到數據之后再發起新的請求,這樣一直循環,就相當于在保持長連接。
除了長輪詢,Comet還有許多其他的實現方式,比如流(Streaming)、WebSocket等等。流的實現方式是在服務器端不斷地向客戶端發送數據,客戶端則通過創建一個持久化的流連接來接收這些數據。WebSocket則使用了一種新的協議來實現實時通信,它允許客戶端和服務器之間進行雙向通信,并且可以不需要像HTTP那樣每次請求都要攜帶頭信息。
Comet技術在實時性要求比較高的場景下非常實用,比如聊天室、金融行情、在線游戲等等。但是需要注意的是,Comet會在一定程度上增加服務器的負擔,因為它需要保持HTTP連接不斷開,而HTTP連接的維持對于服務器來說是比較耗費資源的。