1. 程式人生 > >基於netty-socketio的web推送服務

基於netty-socketio的web推送服務

hub href 相關 發生 推送消息 數據 特定 使用 github

  在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推送服務