如 圖 1 所示,AJAX 的出現使得 JavaScript 可以調用 XMLHttpRequest 對象發出 HTTP 請求,JavaScript 響應處理函數根據服務器返回的信息對 HTML 頁面的顯示進行更新。使用 AJAX 實現“服務器推”與傳統的 AJAX 應用不同之處在於:
- 服務器端會阻塞請求直到有數據傳遞或超時才返回。
- 客戶端 JavaScript 響應處理函數會在處理完服務器返回的信息後,再次發出請求,重新建立連接。
- 當客戶端處理接收的數據、重新建立連接時,服務器端可能有新的數據到達;這些信息會被服務器端保存直到客戶端重新建立連接,客戶端會一次把當前服務器端所有的信息取回。
參考:http://www.ibm.com/developerworks/cn/web/wa-lo-comet/
一個具體的例子:
以nodeJs搭建的 node_chat 聊天室 地址:https://github.com/ry/node_chat
詳細解說 cnodejs下的《node chat源碼解讀》 http://cnodejs.org/topic/4f16442ccae1f4aa27001145
這個例子就是Web頁面以長輪詢的方式向服務器發送請求,讀取新的聊天信息,如果沒有新的聊天信息,則先不執行回調函數,將callback壓入callbacks隊列,直到有新的聊天信息時,觸發callback