消息通知系統詳解1---通訊方式

消息通知系統詳解1—通訊方式
消息通知系統詳解2—後端設計
消息通知系統詳解3—Netty
消息通知系統詳解4—整合Netty和WebSocket

什麼是消息通知系統

消息通知系統,顧名思義即通知消息的傳達處理系統。目的是爲了讓用戶獲得需要得到的消息及提醒並進行處理。
消息通知微服務的定位是“平臺內”的“消息”功能,分爲全員消息,訂閱類消息,點對點消息。例如系統通知,私信,@類消息

  • 全員消息

系統通知,活動通知,管理員公告等全部用戶都會收到的消息

  • 訂閱類消息

關注某一類數據的用戶,該類數據有更新時向用戶發送的消息。例如關注某位大v的微博,公衆號,訂閱某位知名作家的專欄

  • 點對點消息

某位用戶對另外一位用戶進行操作後,系統向被操作的用戶發送的消息。例如點贊,發紅包。

系統特性

消息通知
傳輸的內容 以文字,超鏈接爲主,輔以圖片,不能再多了。
核心需求點 要求消息的高送達率,也就是說“這件事兒一定要想盡辦法通知到對方”。對延時要求不高。
系統建設成本 一般只保存文本消息,存儲成本低。可根據用戶量自由調整服務器集羣配置。
交互方式 消息一般被設計爲“僅通知,不需要回復”

通訊方式

這裏先不考慮後端整體實現,前端與後端之間通訊方式如何選型,如何實現實時/準實時數據交互:
需要介紹下三種通訊方式:

短連接

客戶端和服務器每進行一次通訊,就建立一次連接,通訊結束就中斷連接。
短連接流程
HTTP是一個簡單的請求-響應協議,它通常運行在TCP之上。HTTP/1.0使用的TCP默認是短連接。

長連接

是指在建立連接後可以連續多次發送數據,直到雙方斷開連接。
在這裏插入圖片描述
HTTP從1.1版本起,底層的TCP使用的長連接。
使用長連接的HTTP協議,會在響應頭加入代碼:Connection:keep-alive

短連接和長連接的區別

通訊流程

短連接:創建連接 -> 傳輸數據 -> 關閉連接 ​ 長連接:創建連接 -> 傳輸數據 -> 保持連接 -> 傳輸數據 -> …… -> 關閉連接

適用場景

短連接:併發量大,數據交互不頻繁情況
長連接:數據交互頻繁,點對點的通訊

websocket協議

什麼是websocket協議

  • WebSocket 是 HTML5 開始提供的一種在單個 TCP 連接上進行全雙工通訊的協議。
  • 何謂全雙工:全雙工(Full
    Duplex)是通訊傳輸的一個術語。雙方在通信時允許數據在兩個方向上同時傳輸,它在能力上相當於兩個單工通信方式的結合。全雙工指可以同時進行信號的雙向傳輸。指A→B的同時B→A,就像是雙向車道。
  • 單工就就像是汽車的單行道,是在只允許甲方向乙方傳送信息,而乙方不能向甲方傳送 。
  • 參考資料:https://baike.baidu.com/item/%E5%85%A8%E5%8F%8C%E5%B7%A5/310007?fr=aladdin
  • 服務器向客戶端發送數據的功能是websocket協議的典型使用場景

三種通信方式的優缺點

優缺點如下:

短輪詢 長輪詢 WebSocket
瀏覽器支持 幾乎所有現代瀏覽器 幾乎所有現代瀏覽器 IE 10+ Edge Firefox 4+ Chrome 4+ Safari 5+ Opera 11.5+
服務器負載 較少的CPU資源,較多的內存資源和帶寬資源 與傳統輪詢相似,但是佔用帶寬較少 無需循環等待(長輪詢),CPU和內存資源不以客戶端數量衡量,而是以客戶端事件數衡量。三種方式裏性能最佳。
客戶端負載 佔用較多的內存資源與請求數 與傳統輪詢相似 同Server-Sent Event
延遲 非實時,延遲取決於請求間隔 同傳統輪詢 實時
實現複雜度 非常簡單 需要服務器配合,客戶端實現非常簡單 需要Socket程序實現和額外端口,客戶端實現簡單

在 WebSocket中,瀏覽器和服務器只需要完成一次握手,就可以創建持久性的連接,並進行雙向數據傳輸。
在推送功能的實現技術上,相比使用Ajax 定時輪詢的方式(setInterval),WebSocket 更節省服務器資源和帶寬。
在這裏插入圖片描述
出於服務器性能和實時性考慮,前後端通訊方式採用WebSocket協議實現。

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