【问题标题】:Store SockJS connection on redis在 redis 上存储 SockJS 连接
【发布时间】:2013-11-06 06:29:04
【问题描述】:

我需要将连接从节点服务器卸载到 redis,这样我就可以更新(并重新启动)实时系统上的节点服务器。然后将连接从 redis 拉回节点。 SockJS 连接可以做到这一点吗?

【问题讨论】:

  • 我不明白使用 any 网络连接如何实现这一点。
  • 我认为 socket.io 的 RedisStore 允许这样做。我可能错了。
  • 使用 Redis 在多个 socket.io 实例/服务器之间发布/订阅消息,而不是实际的网络连接。
  • 好的,如果这不可能,您可以将其添加为答案:)
  • 让我们拭目以待,看看有没有人想出答案:)

标签: node.js websocket sockjs


【解决方案1】:

我有个建议(不知道是否还准时):

您无法在任何地方存储网络连接(它不能以任何方式序列化,因为它基于操作系统资源)。但是您可以在 Redis(或任何其他存储机制)上存储所有相关的用户会话状态,并由任何类型的用户 ID 进行索引。

为了从服务器重启(或崩溃)中恢复,客户端可以重新连接,并且在知道用户 ID 的情况下,它可以重新附加到会话状态。

如果您有任何类型的故障转移机制,或者如果重新启动过程足够短,您的用户只会感到通信有点卡顿(如果有的话)。

我希望这会有所帮助。

问候。

海伦诺

【讨论】:

  • 这是我采用的方法:)
  • 这应该是公认的答案,因为它最接近现实(:
【解决方案2】:

如果您重新启动节点服务器,您的所有连接将丢失并且您的客户端将断开连接,则无法存储连接以重新启动服务器。

【讨论】:

  • 如果服务器重启周期在下一个心跳到达之前完成,之前连接的客户端将重新连接到同一台服务器。我认为它可能
  • 但是我认为所有连接的会话状态都会消失,如果我错了,请纠正我。
  • 重新连接到同一台服务器不太可能发生,因为现在所有的 Web 应用程序都运行多个实例。所以必须做其他事情。
猜你喜欢
  • 2015-08-05
  • 2020-02-25
  • 1970-01-01
  • 2016-11-13
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
  • 2013-08-16
  • 1970-01-01
相关资源
最近更新 更多