標籤:發送 更新 推送服務 問題 web項目 訊息 lin 大量 客戶
在WEB項目中,伺服器向WEB頁面推送訊息是一種常見的業務需求。PC端的推送技術可以使用socket建立一個長串連來實現。傳統的web服務都是用戶端發出請求,服務端給出響應。但是現在直觀的要求是允許特定時間內在沒有用戶端發起請求的情況下服務端主動推送訊息到用戶端。最近的預警系統中,需要服務端向預警系統推送商品行情和K線相關的資料,所以對常用的WEB端推送方式進行調研。常見的手段主要包括以下幾種:
- 輪詢(俗稱“拉”,polling):Ajax 隔一段時間向伺服器發送請求,詢問資料是否發生改變,從而進行增量式的更新。輪詢的時間間隔成了一個問題:間隔太短,會有大量的請求發送到伺服器,會對伺服器負載造成影響;間隔太長業務資料的即時性得不到保證。連。使用輪詢的優點是實現邏輯簡單,缺點是無效請求的數量多,在使用者量較大的情況下,伺服器負載較高。因此輪詢的方式通常在並發數量較少、並且對訊息即時性要求不高的情況下使用。
- 長輪詢技術(long-polling):用戶端向伺服器發送Ajax請求,伺服器接到請求後hold住串連,直到有新訊息或逾時(設定)才返迴響應資訊並關閉串連,用戶端處理完響應資訊後再向伺服器發送新的請求。長輪詢技術的優點是訊息即時性高,無訊息的情況下不會進行頻繁的請求;缺點是服務端維持和用戶端的串連會消耗掉一部分資源。
- 外掛程式提供socket方式:比如利用Flash XMLSocket,Java Applet套介面,Activex封裝的socket。優點是對原生socket的支援,和PC端和移動端的實現方式相似;缺點是瀏覽器需要安裝相應的外掛程式。
- WebSocket:是HTML5開始提供的一種瀏覽器與伺服器間進行全雙工系統通訊的網路技術。其優點是更好的節省伺服器資源和頻寬並達到即時通訊;缺點是目前還未普及,瀏覽器支援不好;
綜上,考慮到瀏覽器安全色性和效能問題,採用長輪詢(long-polling)是一種比較好的方式。netty-socketio是一個開源的Socket.io伺服器端的一個java的實現, 它基於Netty架構。 項目地址為: https://github.com/mrniko/netty-socketio
基於netty-socketio的web推送服務