最近我尝试了Netty服务器来开发聊天服务器。我重新使用了“io.netty.http.example.websocketx.server”这个例子,并通过添加频道映射,消息处理器将新消息保存到数据库等来稍微修改它。
频道地图将包含所有已打开的频道和订阅的聊天室ID。因此,当有人向聊天室123发送一些消息时,在收到messageReceived函数中的消息后,服务器会将消息发送到订阅该聊天室的所有频道。
当只有一个WebSocketServer实例时,此方法可以正常工作,但是,如何将负载平衡到多个WebSocketServers?当WebSocketServer#1收到消息时,有没有办法通知WebSocketServer#2将消息发送给所有订阅用户?
答案 0 :(得分:0)
Netty无法提供你想要的东西。
由于用户只需要接收新消息,因此您需要寻找分布式,非持久性发布/订阅系统。您可以自己创建一个,但另外两个选项是
在任何一种情况下,您的聊天服务器都会一直接收所有消息,并且需要进行适当的过滤。有两种技术的方法,您只能在必要时接收您感兴趣的消息(JMS选择器,淡化广播中的不同主题)。
也许值得查看构建在Netty和Hazelcast上的Vert.x并提供分布式事件总线