!! 本文聊天室基於 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 ...