首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >两个Websockets在不同节点上的通信?

两个Websockets在不同节点上的通信?
EN

Stack Overflow用户
提问于 2014-05-23 15:01:41
回答 3查看 1.4K关注 0票数 8

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

在单节点配置中,简单的解决方案是维护具有所有Websocket和会话的静态MapList,并根据消息目的地将其路由到适当的Websocket。但是,多个节点显然不能工作,因为静态Map/List是每个JVM。

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

对于如何解决这个问题,我们有些不知所措,非常感谢你能给我们的任何建议。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-27 12:18:35

你可以用两种方式做这件事

1)您可以在不同的web服务器上创建单独的推送服务,让发布者和订阅者收听此服务。使用此push服务作为代理,也就是说,每当publisher准备好将数据推送到此服务时,代理就会将数据广播发送给所有订阅者。

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

您还可以将此服务用于其他目的,如保护消息、维护会话、存储消息以供将来传递时,如果预期接收方无法接收这些消息。

然而,使用该模型的缺点是,它将为应用程序设置增加一次维护开销。

票数 3
EN

Stack Overflow用户

发布于 2014-05-27 13:32:56

我建议使用数据库作为同步点。

假设有一个带有挂起消息的DB表,每个节点定期查询它,并且只为其活动客户端选择消息,传递它们并更新表(并插入新接收的消息)。

优势:

  • 易于实现
  • 易于配置(每个节点上的数据源相同)
  • 快地
  • 超级可伸缩
  • 不会是基础设施的噩梦
  • 易于监控
  • 事务性(相对于某些集群范围内的缓存)

唯一的复杂之处在于,您必须想出一个很好的策略来决定何时进行查询,这样就不会使DB过于饱和;例如,您可以使用单个JMS主题向其他节点发出一个新消息到达的信号。

我知道它看起来不像只使用异步消息来完成它那样花哨,但是请考虑一下!

票数 2
EN

Stack Overflow用户

发布于 2014-05-28 17:41:09

最简单的方法可能是使用内置的集群通信系统,这样,您将保持水平可伸缩性:

https://docs.jboss.org/author/display/WFLY8/HTTP+Services

http://www.jgroups.org/tutorial/html/ch02.html

如果当前节点上没有消息目标连接,只需将其转发到集群的所有其他节点,管理良好连接的节点就会将其推送,其他节点将忽略它。

无论如何,我从来没有使用过这种特性,我认为网络必须支持多播。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23832540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档