如何连接到elb后面的特定服务器?

how to connect to specific server behind elb?

我是 运行 一个允许客户使用 websockets 创建房间的聊天应用程序。我想使用 aws 弹性负载平衡,但我不确定如何确保两个想要聊天的客户端最终位于同一台服务器上。具体避免以下情况:

  1. 客户端 A 在服务器 A 上创建了一个房间(通过负载均衡器)并且 将 link 发送给客户端 B。
  2. 客户端 B 连接到 link,但得到 路由到负载均衡器后面的服务器 B。

我看过代理协议,但对我的水平来说似乎太复杂了,我不确定这是否适合我的目的。

只用一个ELB是做不到你想做的。无法确保 2 个客户端最终位于同一台服务器上。

我可以看到 2 个选项:

  • 在elb后面的节点之间创建共享状态。聊天室将在所有服务器上可见,您应该确保聊天室中发送的每条消息都发送到客户端连接到聊天室的所有实例。

  • 创建聊天室管理和发现服务。它将在创建房间时负责 select 服务器,并在用户想要连接到房间时重定向用户。您可以通过将服务器放在聊天室位置来简化它,并为服务器创建创建一个非常简单的逻辑客户端,但这将限制正确的平衡。

对于完整的 HA 和缩放系统,您可能需要两者。

我和亚马逊的一些人谈过,他们只是建议在创建聊天室时首先使用负载均衡器,并获取创建它的服务器 ip,并将其传递给客户端 B 以直接连接到该服务器。效果很好!