题目描述的问题,困扰了(இдஇ; )我很久。本地开发调试都好好的,怎么部署到测试环境之后,本该发出去的消息,在Js客户端死活收不到消息。各种怀疑排查,多次部署还是没能改善。怎么办?继续排查。
这次我把与消息发送最直接关键的两个对象Debug打印出来,这两个对象就是服务端的SocketIONamespace和客户端建立连接后保存Session的SocketIOClient。然后,发现了奇特的现象。多实例部署时,少数的几个客户端都连接到了一个实例,而消息是从另外一个没有任何客户端连接的实例发出的。有了发现,开始猜测netty socket IO server开发者没能想到多实例少数交叉客户端的情况,在检测到实例没有客户端连接时,是不能有服务端主动发送消息的。它此时认为没有客户端,你服务端的消息没有接受者,干脆不发送了。没有客户端也不会知道。
而在集群多实例部署时,当前实例没有客户端,从当前实例发送的消息,可以被其他实例的客户端接收呀,自作主张不发送了,是什么意思?也许是没理解作者的设计意图,又或者是集群部署时,没有相互发现各自的存在。总之,可以作为一个问题,在集群多实例部署时要考虑到。