【发布时间】:2016-04-17 21:32:11
【问题描述】:
我正在使用在 AWS/EC2 上运行的 Jetty 9.3.7 WebSockets 服务器使用 WebSockets 编写一个类似聊天的应用程序。架构描述如下:
(a) 服务器基于HTTPS (wss)。我正在考虑使用HAProxy,为此使用基于 IP 哈希的 LB。系统架构将如下所示:
-->wss1: WebSocket server 1
/
clients->{HAProxy LB} -->wss2: WebSocket server 2
(a, b,..z) \
-->wss3: WebSocket server 3
我将根据这些 instructions 在 LB 上终止 HTTPS/wss。
(b) 客户端 a...z 连接到系统,并将以各种方式连接到 wss1、wss2 或 wss3 等。
(c) 现在,我的 WebSocket 应用程序如下工作。当其中一个客户端推送消息时,它被发送到客户端连接到的 WS 服务器(比如wss1,然后该消息被传播给其他几个客户端(客户端集在我的程序中以编程方式确定)在wss1 上运行的WebSocket 应用程序。例如,a 创建一条消息Hey guys! 并将其推送到wss1,然后将其推送到客户端b 和c,以便b 和c接收Hey guys! 消息。b 具有到服务器 wss2 的 WebSocket 连接,c 具有到 wss3 的 WebSocket 连接。
我的问题是,要从消息接收服务器推送消息,如上面的 (c),wss1 需要知道到 b 和 c 的 WebSocket 会话/连接很可能在不同的 WebSocket 上服务器。我可以在 Jetty 上使用会话集群来检索会话 b 和 c 连接到吗?如果没有,在负载平衡 Jetty WebSockets 时提供此查找的最佳方式是什么?
其次,如果我确实使用会话集群或某种此类方法来检索会话,我如何使用wss1 上的b 和c 的会话将消息发送到b 和c ?除了服务器之间的某种通信之外,似乎没有办法做到这一点。这是正确的吗?
如果我必须为此使用会话集群,是否有一个 github 示例可以指点我?
谢谢!
【问题讨论】:
-
我的问题的 TL;DR 版本是:在stackoverflow.com/questions/15646213/… 中,Joakim 的响应描述了如何检索本地存储在同一服务器上的 WebSocket 会话。当会话在不同的服务器上时,我该如何实现?如果会话集群是一种方式,有没有可以找到 Jetty 的会话集群模式的地方?
标签: websocket jetty load-balancing high-availability