负载均衡netty websocketserver

时间:2014-07-09 06:12:56

标签: netty load-balancing

最近我尝试了Netty服务器来开发聊天服务器。我重新使用了“io.netty.http.example.websocketx.server”这个例子,并通过添加频道映射,消息处理器将新消息保存到数据库等来稍微修改它。

频道地图将包含所有已打开的频道和订阅的聊天室ID。因此,当有人向聊天室123发送一些消息时,在收到messageReceived函数中的消息后,服务器会将消息发送到订阅该聊天室的所有频道。

当只有一个WebSocketServer实例时,此方法可以正常工作,但是,如何将负载平衡到多个WebSocketServers?当WebSocketServer#1收到消息时,有没有办法通知WebSocketServer#2将消息发送给所有订阅用户?

1 个答案:

答案 0 :(得分:0)

Netty无法提供你想要的东西。

由于用户只需要接收新消息,因此您需要寻找分布式,非持久性发布/订阅系统。您可以自己创建一个,但另外两个选项是

  • 使用JMS服务器。您的每个服务器都订阅一个非持久性主题。他们向主题发布消息以向所有其他聊天服务器广播。
  • 嵌入Hazelcast并将其分布式主题机制用于相同目的。这里的优点是您不需要运行单独的JMS服务器,每个聊天服务器都成为群集的成员

在任何一种情况下,您的聊天服务器都会一直接收所有消息,并且需要进行适当的过滤。有两种技术的方法,您只能在必要时接收您感兴趣的消息(JMS选择器,淡化广播中的不同主题)。

也许值得查看构建在Netty和Hazelcast上的Vert.x并提供分布式事件总线