【问题标题】:Load balance websocket connection via dynamic url parameter通过动态 url 参数负载平衡 websocket 连接
【发布时间】:2014-11-25 20:03:21
【问题描述】:

为了扩展我们的实时应用程序,我们需要水平添加 Web 套接字服务器。

每个用户都通过一个包含 groupId 变量的 url 进行连接:http://ws.example.com/{groupId}。 该 groupId 是动态的,无法预测。

因此,许多用户共享同一个 groupId。为了通过 websocket 服务器在它们之间进行通信,共享相同 groupId 的每个用户必须在同一个 websocket 服务器中。

我们想要实现一个负载平衡系统来平衡我们的 websocket 服务器。

-如果一个客户端(userA)连接,并且serverA上存在另一个具有相同groupId的连接(userB),那么我们要连接serverA上的userA。

-如果不存在与该 groupId 的现有连接,那么我们通过经典的负载平衡算法允许 websocket 服务器。

我们怎样才能做到这一点?我们的服务器目前在 nginx 上运行。

【问题讨论】:

    标签: node.js nginx websocket load-balancing phpwebsocket


    【解决方案1】:

    Websocket 使用 HTTP 协商,但不支持重定向(301 或 302)。所以一旦你的用户连接了,你必须检查它是否在正确的地方,否则发送一条消息,表明它必须连接到其他地方。

    因此,您将在这两者之间取得serverA.whatever.comserverB.whatever.comws.whatever.com 之间的平衡。那么如果一个用户连接到ws://ws.whatever.com并且它是“平衡的”到serverA.whatever.com,但是因为url中的参数应该连接到另一个,你必须实现一些逻辑,所以服务器说{ messageType:"connection", message:"reconnect", location:"ws://serverB.whatever.com"},并且客户端理解该消息并尝试重新连接到这样的“位置”。

    这很痛苦,因为这意味着主机必须知道自己的主机名。

    【讨论】:

      猜你喜欢
      • 2018-01-03
      • 1970-01-01
      • 2012-09-13
      • 2021-03-18
      • 1970-01-01
      • 2020-05-26
      • 1970-01-01
      • 2014-01-03
      • 1970-01-01
      相关资源
      最近更新 更多