jakarta-ee - Wildfly - 不同节点上的 2 个 Websocket 之间的通信?

标签 jakarta-ee jboss websocket cluster-computing wildfly

我们正在开发一个应用程序,其中将包含一些基本的聊天/消息传递功能。 Web 应用程序部署在 Wildfly 8.x 上,并使用标准的 JavaEE 7 库(而不是像 Spring 这样的附加应用程序框架)我们正在利用 Websockets 来实现这一点,因为我们需要它的推送到浏览器功能提供。但是,我们正在集群/HA 配置中部署此 Web 应用程序。如果 UserA 连接到 NodeA 并传入一条消息,该消息以连接到 NodeB 的 UserB 为目的地,我们如何进行此消息的传输?

在单节点配置中,简单的答案是保持静态 MapList它具有所有 Websocket 和 session ,并根据消息目标路由到适当的 Websocket。但是,由于静态 Map 显然无法正常工作的节点不止一个。/List是每个JVM。

我们将如何实现这一目标?是否可以使用 JMS 并使每个 Websocket 充当 JMS 监听器?这会对资源利用率或可扩展性和性能产生什么影响?

我们对如何解决这个问题有点不知所措,非常感谢您提供的任何建议。

最佳答案

你可以通过两种方式做到这一点

1) 您可以在不同的 Web 服务器上创建单独的推送服务,让发布者和订阅者收听该服务。将此推送服务用作代理,即只要发布者准备好要推送的数据,他们就会将其推送到此服务,然后代理将数据广播给所有订阅者。

2) 您可以在单独的 JVM 上创建一个 JMS 队列,让发布者和订阅者监听此服务。将此 JVM 服务用作代理。

您还可以将此服务用于其他目的,例如保护消息、维护 session 、存储消息以备将来在预期接收者无法接收消息时使用。

然而,使用该模型的缺点是它会为您的应用程序设置增加额外的维护开销。

关于jakarta-ee - Wildfly - 不同节点上的 2 个 Websocket 之间的通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23832540/

相关文章:

java - 基于 SOAP 的 Web 服务中的身份验证和角色 (Java)

java - 使用 javax.json 中的两个对象渲染 JSON

java - 未找到查询异常的实体

java - Spring 将 XML 数据文件注入(inject)到 Java 类

具有后端功能的 Java Web 服务

java - 将最大连接值设置为 0 : IBM WebSphere

java - 在 Jboss 模块和项目依赖项之间选择库版本

apache - 使用 apache 隧道安全 websocket 连接

node.js - Expressjs 应用程序,使用 websockets 进行聊天。为 websocket 服务器使用不同的端口?

javascript - 如何通过 websockets 同步两个 javascript 定时器