因此,人们通常使用SocketIO和Node构建的第一个应用程序通常是聊天应用程序。这个聊天应用程序基本上有一个节点服务器,将广播给多个客户端。在Node代码中,您将看到类似这样的内容。
//Psuedocode
for(client in clients){
if(client != messageSender){
user.send(message);
}
}这对于较少的用户来说是很棒的,但我看到了一个问题。首先,存在单点故障,即Node服务器。其次,随着客户端数量的增加,应用程序的速度会变慢。那么,当我们到达这个瓶颈时,该怎么办?有没有一种架构(水平/垂直缩放)可以用来缓解这个问题?
发布于 2012-03-18 15:14:50
对于“某一天”,当您的聊天应用程序需要多个容错节点服务器,并且您希望使用socket.io在服务器和客户端之间进行交叉通信时,有一个node.js模块可以满足您的需求。
https://github.com/hookio/hook.io
它基本上是一个事件发送框架,用于在多个“事物”之间进行交叉通信--例如多个节点服务器。
与大多数模块相比,它的使用相对复杂,这是可以理解的,因为这是一个需要解决的复杂问题。
也就是说,在你开始遇到问题之前,你可能必须有几千个并发用户和许多其他问题。
你可以做的另一件事,是尝试开发你的应用程序,这样如果连接丢失(无论如何都会发生),例如。服务器宕机,客户端出现网络问题(例如,移动用户)等,您的应用程序应该能够处理这些问题,并从容地从这些问题中恢复。
发布于 2012-03-16 14:32:13
因为Node.js只有一个事件循环线程,所以这个单点故障会被写入到它的DNA中。即使在代码更改后重新加载服务器,也需要停止此线程。
然而,有很多工具可以优雅地处理此类故障。您可以使用forever;这是一个简单的命令行界面工具,用于确保给定的脚本连续运行。其他选项包括distribute和up。Distribute是Node的负载均衡中间件。在分发的基础上构建,使用JavaScript应用程序接口或命令行界面提供零下载时间重新下载:
进一步阅读,我发现您只需要使用Redis Store和Socket.io来维护两个或多个进程/服务器之间的连接引用。这些选项已经在here和here中进行了广泛的讨论。
如果你不打算使用Redis商店,也可以选择使用socket.io-clusterhub。
https://stackoverflow.com/questions/9732452
复制相似问题