负载平衡netty websocketserver

负载平衡netty websocketserver,netty,load-balancing,Netty,Load Balancing,最近我试用了Netty server来开发聊天服务器。我重新使用了示例io.netty.http.example.websocketx.server,并通过添加通道图、消息处理器将新消息保存到数据库等方式对其进行了轻微修改 频道地图将包含所有打开的频道和订阅的聊天室id。因此,当有人向聊天室123发布消息时,在messageReceived功能中收到消息后,服务器将向订阅该聊天室的所有频道发送消息 当只有一个WebSocketServer实例时,此方法可以正常工作,但是,如何将负载平衡到多个We

最近我试用了Netty server来开发聊天服务器。我重新使用了示例io.netty.http.example.websocketx.server,并通过添加通道图、消息处理器将新消息保存到数据库等方式对其进行了轻微修改

频道地图将包含所有打开的频道和订阅的聊天室id。因此,当有人向聊天室123发布消息时,在messageReceived功能中收到消息后,服务器将向订阅该聊天室的所有频道发送消息


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

Netty不会提供你想要的现成信息

由于用户只需要接收新消息,所以您正在寻找一个分布式、非持久性的发布/订阅系统。您可以自己创建一个,但还有两个选项

使用JMS服务器。您的每个服务器都订阅了一个非持久性主题。它们将消息发布到主题,并广播到所有其他聊天服务器。 为了同样的目的嵌入并使用它的分布式主题机制。这里的优点是您不需要运行单独的JMS服务器,每个聊天服务器都成为集群的一个成员 在任何一种情况下,您的聊天服务器都会一直接收所有消息,需要进行适当的筛选。这两种技术都有一些方法,您只能在必要时接收您感兴趣的消息,JMS选择器,hazelcast中的不同主题


还值得一看的是,它建立在Netty和Hazelcast的基础上,并提供分布式事件总线

当一个新频道加入聊天室时,是否要求他们接收发布到聊天室的所有消息的历史记录,还是只接收从该点开始发布的消息?无需查看历史记录,用户只会收到从那时起发布的新消息。嗨,John,不确定我是否理解正确。您是否介意再详细解释一下如何使用Hazelcast进行此操作?我可以将新消息存储在Hazelcast队列中,但是,这意味着不同服务器中的每个websocket连接都需要保持池,以查看Hazelcast队列中是否有可用的新消息。这有点理论性,因为我自己没有这样做。查看上的“主题示例”选项卡。您需要实现MessageListener并订阅主题,如图所示。当消息到达时,Hazelcast将调用onMessage。最简单的实现是onMessage实现将消息发送到每个连接的通道。注意:如果您无法跟上,hazelcast可能会删除消息。另外,如果将消息写入所有通道需要一段时间,您可能希望将实际写入操作卸载到另一个线程,以避免阻塞hazelcast线程太长时间。非常感谢John,您非常有帮助。干杯