一个愚蠢的问题,但请握住枪,因为我做了很多研究,但这一点在我的脑海中没有点击。
假设我有一个 spring mvc Web 应用程序,用户可以使用 websockets 或任何其他机制订阅它......我们得到一个连接对象,无论是 HttpSession、DeferredResult、AtmosphereResource 等,然后我们制作一个本地地图并存储这个挂起的连接......现在,当我们需要发送更新时,我们只需从内存映射中获取它并发送更新。
现在,如果我有一个雄猫集群并且用户可以连接到任何节点,他们如何共享这些挂起的连接怎么办?这不是会话复制问题,我不在会话中存储任何内容,我只需要有一种办法连接回客户端......
如果这是一种错误的思维方式,那么我如何使集群环境工作?用户连接到任何节点,当该节点出现故障时会发生什么?
非常感谢任何帮助,我对此非常绝望,因为我们的项目停留在关键阶段。
看起来您正在尝试同时解决许多问题:
- 如何在集群环境中管理 WebSocket 连接?
- 如何在服务器端管理心跳、(取消)连接事件?
- 如何在客户端管理心跳、(取消)连接事件?
- 如何使用 Spring 有效地驱动消息驱动的应用程序?
- 以及更多...
Spring 4 引入了具有非常酷功能的 websocket 支持,可以回答您的许多问题。在集群环境中,Spring 推荐一个 MQ 实例(支持 STOMP),例如 RabbitMQ。此 MQ 将管理主题订阅和消息分发,而每个 tomcat 将管理客户端连接。
有几个示例应用程序显示了其工作原理:项目组合应用和聊天应用。