【问题标题】:NodeJS socket.io change connection fastNodeJS socket.io 快速改变连接
【发布时间】:2013-08-04 04:18:53
【问题描述】:

我正在尝试在 NodeJS 中实现零停机 socket.io 集群环境。
我的目标是使用 Redis 将服务器负载分布在多个节点实例中以同步数据。

如果可能的话,我很伤心,一旦检测到新的变化,让 socket.io 客户端在另一个实例上重新连接而没有任何停机时间或数据丢失。

为了恢复我的想法,我的目标是用新代码重新加载 socket.io 而不会停机。

【问题讨论】:

  • "用新代码重新加载socket.io,无需停机" 你是什么意思?
  • 当我更改我的代码时,我想在不丢弃现有套接字连接的情况下部署它。我的目标是让现有用户能够在当前套接字连接上执行这些新功能。
  • 改什么代码?你需要更具体。你到底想达到什么目的?

标签: javascript node.js socket.io


【解决方案1】:

如果这是一个安静的网络服务,这应该不是问题。如果您对 NodeJS 服务器进行负载均衡,并且所有服务器都连接到同一个 redis 实例或集群,那么当您从负载均衡器轮换中优雅地拉出服务器时,您的客户端应该不会出现明显的停机时间。实际上,这种方法适用于任何环境。

【讨论】:

  • 这个问题是它可以完美地处理 HTTP 请求,但不能处理套接字。与 HTTP 请求不同,套接字始终是连接的。因此,如果我杀死一个进程并使用最近的代码创建一个新进程,所有连接的用户都会失去那里的连接。
  • 我认为这个问题会通过好的设计来解决。如果您的会话由 redis 处理,并且服务器出现故障。客户端应该足够聪明,可以知道服务器出现故障。它应该发送带有会话 id 的第二个请求,并且应该很容易从该点解析套接字。当然会有“一些”停机时间,但它会非常少。除非你不断地 ping 同一个服务器,否则我看不到你解决这个问题。
  • 好的,我想这是最好的解决方案。在服务器上使用带有 redis 的负载均衡器,并对客户端 socket.io 进行编程以立即重新连接并传递会话信息。感谢您的帮助;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多