筆者在近期使用signalr開發(fā)一個即時Web聊天應(yīng)用舀寓,為了以后打基礎(chǔ),使用Redis做了一個簡單的消息隊列。但是當(dāng)signalr服務(wù)器進(jìn)行集群化的時候王带,由于使用了兩個以及以上的集群, 在初步實驗的時候市殷,在JS連接客戶端的時候出現(xiàn)了一下的客戶端報錯愕撰。由于在一開始的單例服務(wù)中, 使用反向代理是完全可行的醋寝。所以搞挣,排除掉了服務(wù)器端編寫的錯誤。
? ? 之后音羞,筆者在服務(wù)器端查看了有關(guān)SignalR服務(wù)的日志囱桨。在對比日志后發(fā)現(xiàn), 在用戶的一次連接中嗅绰, 兩個服務(wù)端同時生成一個Connection Id 舍肠。并在握手失敗后搀继,又移除的Connection Id 。
? ? 經(jīng)過對比后翠语,筆者進(jìn)一步猜想叽躯,可能是由于負(fù)載均衡的時候?qū)S客戶端的請求分發(fā)到多個signalr實例,所以造成了肌括,雖然客戶端的連接到服務(wù)端点骑,由于消息包接受的并不完整而導(dǎo)致,握手流程的失敗谍夭。
? ? 而后黑滴,筆者將Nginx的服務(wù)器中的負(fù)載均衡方式由默認(rèn)配置,改為了 ip_hash 慧库,而后一次通過了握手跷跪,連接建立成功。