訊息推送系統

2022-08-30 01:39:10 字數 1414 閱讀 1944

實現方式三種

方式描述

優點缺點

短輪詢客戶端通過ajax每隔一段時間向服務端發起一次請求,服務

端不管有無訊息都返回給客戶端。

實現簡單

對客戶端和服務端無要求

大部分請求為無效請求

浪費頻寬和伺服器

實時性不高

長輪詢與短輪詢類似,不同的是,服務端收到請求後,若沒有新訊息則

等待(不立即返回),直到有新訊息或超時才返回。

實現簡單

對客戶端無要求

服務端壓力增大

浪費服務端連線

長連線客戶端和服務端開啟一條連線通道,實現雙工通訊。有新訊息時,

服務端主動推送給客戶端。

效率最高

瀏覽器版本要求

nginx、tomcat版本要求

筆者採用長連線的方式,用websocket來做長連線。

系統架構圖

訊息推送時序圖

一共兩個服務,連線服務和推送服務。

連線服務用於和客戶端保持長連線,接收到mq的訊息時,將訊息推送給客戶端。因為要保持長連線,基於前置機的特點,可能需要採取一些策略來保持,這裡是nginx,預設60s超時,需要客戶端每乙個時間間隔(30s)傳送乙個心跳包。

推送服務用於接收各業務系統的訊息推送請求,過濾並放到mq中。

連線服務和推送服務的特質不同,用mq來做解耦。接連服務:公網,有狀態,壓力來至客戶端數量;推送服務:內網,無狀態,訊息推送頻次。

伸縮性

健壯性

許可權方面問題

存在問題:

mq選型

這裡考慮了kafka和redis兩種方案

redis方案。每個使用者乙個list,每個連線服務只監聽和自己保持連線的的使用者的list,每次pop到新訊息就通過連線傳送。

綜合考慮,用kafka。原因:問題明確,且出現機率小,後期可通過其他的策略來避免。redis做mq因為不夠成熟,不確定性大故棄用。

日誌查詢

已傳送的訊息,未成功傳送的訊息。本期只做已傳送訊息的查詢,未傳送的不做。具體實現為,在連線服務中落地,訊息傳送後,將訊息存到db,供後續查詢用。

訊息推送系統方案

臨時整理的乙份方案,內容還需細化和推敲。訊息推送建立 傳送 訊息推送後台管理 推送訊息表字段 訊息推送傳送過程 步驟 socket長連線demo已實現 client 定時向server傳送心跳包,告知 server 繼續保持長連線 server根據接收到的心跳包時段間隔判斷client是否連線正常。...

django python搭建訊息推送系統

因公司專案需求,需要建立乙個展示 接入兩台攝像機,當攝像機的 流傳過來的時候,實時展示到網頁中,所以需要做乙個實時推送系統的小demo,因接觸django時間不長 兩周左右 也算邊做邊學習了,網上用channels做實時聊天系統的較多,實時推送系統的比較少。channel layers from d...

PHP workerman訊息推送系統學習

一 github官網 二 使用 2 後端服務啟動 linux系統 啟動服務 php start.php start d 停止服務 php start.php stop 服務狀態 php start.php status windows系統 雙擊start for win.bat 引入前端檔案 to ...