1. 程式人生 > >web叢集部署(例項大於等於2個),nginx作為中介軟體時候,後端websocket有時候訊息無法傳遞給客戶端

web叢集部署(例項大於等於2個),nginx作為中介軟體時候,後端websocket有時候訊息無法傳遞給客戶端

最近公司有一個需求:新訂單需要及時提醒到後臺管理者,基於這一點我決定採用Websocket來實現。

當我把專案部署到生產環境的時候發現一個問題:

建立了Websocket連線後,每當有新的訂單發起,客戶端都會受到新訂單提醒。這時候就遇到一個問題,新訂單進來之後 客戶端有時候會有提醒 有時候卻沒有提醒,並且 Websocket 狀態一直是開啟。


經過一系列排查發現,我的web專案做了 叢集部署 分別佔用 8500,8501,8502 埠 ,客戶端請求nginx的時候  會隨機分配一個 例項 進行websocket 連線。在這種情況下  如果客戶端的連線 不是和一開始建立連線的例項一樣的話,是監聽不到訊息的。

因此我的解決方案是  修改nginx 的輪詢策略 ,改為 ip_hash,一個ip的使用者就分到指定的一臺例項。


如果有大佬有更好的解決方案 請留言