你來說說 websocket 有什么用 雙向通信,服務(wù)器端可以主動 push,給客戶端發(fā)送通知 那websocket多個節(jié)點有什么問題? 頭條面試官的提問讓我的回憶飄到了一個下午,想起了我兩個同事之間的對話 引子咱有部分用戶收不到通知了 通知是由ws服務(wù)控制的,它最近是有啥改動么 也沒改啥,以前單個節(jié)點也沒有問題 想起來了,接上面通知,把服務(wù)都從單節(jié)點改成了多節(jié)點 對,說是為了什么 HA,兩位數(shù)用戶的服務(wù)需要折騰嗎 沒事,這樣出去了也有搭建高可用服務(wù)與 websocket 負載均衡的經(jīng)驗了 說的倒也是!不過這樣確實會有 ws 分布式的問題 簡單,加個 reids 就好了 多節(jié)點問題在開始思考分布式會有什么問題時,先來回答一個問題: 服務(wù)端如何與客戶端交流? 在 ws 服務(wù)端,當與客戶端連接成功后,會生成一個對象 那如何給所有人廣播消息呢? 服務(wù)器只需要與它自身的所有連接 單節(jié)點當單節(jié)點時所有用戶都能正常受到通知,流程如下 這時所有用戶都能收到消息通知 多節(jié)點當多節(jié)點時,就會有部分用戶無法正常受到通知,從以下流程圖中可以很清楚地看到問題所在 負載到節(jié)點2的所有用戶都沒有收到消息通知 如何解決多節(jié)點服務(wù)器就會有分布式問題,解決分布式問題就找一個大家都能找到的地,比如說 改進后流程圖如下
redis PUBSUB其中有一個細節(jié)是 pub/sub 那里,redis 的
如果我們要訂閱 小結(jié)借用解決方案的圖作為小結(jié) |
|