Web推送技術研究

Web推送技術研究

背景:

我們研發的平臺已經完成了支持PC端和移動端的針對大量用戶的實時消息推送體系,採用原生的socket建立長連接的技術來實現。當前階段要開發相應支持web端的實時消息推送體系,如何實現擺在了我的面前,以下是我考察和論證的結果,和大家一起分享下,也歡迎大家指正我其中的錯誤或考慮不周之處。

有哪些可以實現web消息推送的技術:

我們瞭解到傳統的web服務都是客戶端發出請求,服務端給出響應。但是現在直觀的要求是允許特定時間內在沒有客戶端發起請求的情況下服務端主動推送消息到客戶端。

  • 不斷地輪詢(俗稱“拉”)通常是我們考慮獲取實時消息的一個手段:最常見的例子大家應該不陌生,咱買火車票用的搶票軟件,就是輪詢啊,輪詢啊...(話說我現在正搶票呢,亞歷山大。後話:沒搶上) *

    • 優點:服務端邏輯簡單;
    • 缺點:其中大多數請求可能是無效請求,在大量用戶輪詢很頻繁的情況下對服務器的壓力很大;
    • 應用:併發用戶量少,而且要求消息的實時性不高;
  • 長輪詢技術:客戶端向服務器發送Ajax請求,服務器接到請求後hold住連接,直到有新消息或超時(設置)才返回響應信息並關閉連接,客戶端處理完響應信息後再向服務器發送新的請求...

    • 優點:實時性高,無消息的情況下不會進行頻繁的請求;
    • 缺點:服務器維持着連接期間會消耗資源;
    • 應用:WebQQ、知乎,Quora...
  • 基於Iframe及htmlfile的流(streaming)方式:iframe流方式是在頁面中插入一個隱藏的iframe,利用其src屬性在服務器和客戶端之間創建一條長鏈接,服務器向iframe傳輸數據(通常是HTML,內有負責插入信息的javascript),來實時更新頁面。

    • 優點:消息能夠實時到達;
    • 缺點:服務器維持着長連接期會消耗資源;
    • 應用:gmail+gtalk 產品;
  • 插件提供socket方式:比如利用Flash XMLSocket,Java Applet套接口,Activex包裝的socket。

    • 優點:原生socket的支持,和最前面我說的PC端和移動端的實現方式相似;
    • 缺點:瀏覽器端需要裝相應的插件;
    • 應用:在一些網絡遊戲中很多見;
  • WebSocket:是HTML5開始提供的一種瀏覽器與服務器間進行全雙工通訊的網絡技術。

    • 優點:更好的節省服務器資源和帶寬並達到實時通訊;
    • 缺點:目前還未普及,瀏覽器支持不好;
    • 應用:我不清楚,哈哈;

技術選型:

鑑於自己印象裏一直對web端推送中的Comet有些瞭解,上述的基於長輪詢和基於iframe流的方式都是Comet的具體實現。其中使用也最爲廣泛,所以決定採用Comet技術來實現web推送。

web框架選擇:

當然,不至於自己造個輪子,所以決定選擇現有的基於Comet技術的web框架來進行開發。大家可以通過wiki Comet 詳細瞭解下Comet的歷史及相關框架。其中有基於java的,基於php的,因爲我經常使用Python寫測試維護腳本而且發現python的框架很簡潔,所以我初步選擇的是用基於python的Tornado框架結合Comet技術來實現web的推送體系。

參考文章:Comet:基於 HTTP 長連接的“服務器推”技術

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章