NodeJS + SocketIO:扩展和防止单点故障

den*_*iss 5 publish-subscribe node.js socket.io

因此,人们通常使用SocketIO和Node构建的第一个应用程序通常是聊天应用程序.这个聊天应用程序基本上有1个节点服务器,将广播到多个客户端.在Node代码中,你会有类似的东西.

//Psuedocode
for(client in clients){
  if(client != messageSender){
    user.send(message);
  }
}
Run Code Online (Sandbox Code Playgroud)

这对于少量用户来说非常有用,但我发现这有问题.首先,存在单点故障,即节点服务器.其次,随着客户数量的增长,应用程序将会放慢速度.当我们遇到这个瓶颈时,有什么可以做的?是否有可用于缓解此问题的架构(水平/垂直缩放)?

arn*_*rhs 4

对于“有一天”,当您的聊天应用程序需要多个容错节点服务器,并且您希望使用 socket.io 在服务器和客户端之间进行交叉通信时,有一个 node.js 模块可以满足您的需求。

https://github.com/hookio/hook.io

它基本上是一个事件发射框架,用于在多个“事物”(例如多个节点服务器)之间进行交叉通信。

与大多数模块相比,它的使用相对复杂,这是可以理解的,因为这是一个需要解决的复杂问题。

话虽这么说,在您开始遇到此问题之前,您可能必须有几千个并发用户和许多其他问题。

您可以做的另一件事是尝试以某种方式开发您的应用程序,以便如果连接丢失(无论如何都会发生),例如。服务器出现故障、客户端出现网络问题(例如移动用户)等,您的应用程序应该能够处理这些问题并从此类问题中正常恢复。