WebSocket 集群 session 共享方案

2021-10-10 03:45:33 字數 676 閱讀 7974

!! 本文聊天室基於 websocket 進行實現,同時也為解決websocket session在集群部署服務時的無法共享導致的收發訊息問題。

當我們使用 websocket 實現聊天時,後端服務會將所有的 websocket session快取起來,之後根據收到的訊息,遍歷或者找到某個session進行訊息的傳送。但是在我們進行後端集群部署時,這裡假設存在2台後端伺服器a和b,使用者u1連線a的websocket同時建立session,這時a將session進行快取,u2進行同樣的操作,連線b伺服器。

此時,u1**訊息,訊息到達a服務,讀取session快取,遍歷session傳送訊息,但由於u2的session不在a服務上,所以u2無法受到訊息。問題形成。

針對上述問題,可以將session進行分布式儲存或者將訊息進行廣播。

session分布式儲存

可以採用redis進行分布式的session儲存,但是發現websocket session 並未實現 serializable 介面,無法進行序列化。此方案不可行。

訊息廣播

將訊息傳送至mq元件,由mq通知各個服務節點訊息內容,滿足**訊息。

這裡針對第二種訊息廣播的方案實現較為簡單,不再做詳細敘述。

Redis儲存Tomcat集群的Session

redis儲存tomcat集群的session 如何 做到把新開發的 推送到到生產系統中部署,生產系統要能夠零宕機 對使用使用者零影響。設想 那麼問題來了 在取下tomcat節點和載入新tomcat節點時如何做到對使用者無影響呢?方法很簡單,共享session。下面 我們用例項來說明此方案。我們的例...

在IHttpHandler中獲取session

因為業務要非同步通過ihttphandler獲得資料,但還要根據當前登入人員的session過濾,因此要在在ihttphandler中獲取session 方法是httphandler容器中如果需要訪問session,必須實現irequiressessionstate介面,這只是乙個標記介面,沒有任何...

C 刪除WebBrowser控制項的Session

因最近做乙個成績查詢匯出的程式,用到webbrowser控制項,該查詢的 限制乙個會話只能查詢3次成績,而我要查詢4000多人的成績。using system.runtime.interopservices private const int internet option end browser ...