首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NodeJS + SocketIO:扩展和防止单点故障

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

Stack Overflow用户
提问于 2012-03-16 13:36:45
回答 2查看 2.3K关注 0票数 5

因此,人们通常使用SocketIO和Node构建的第一个应用程序通常是聊天应用程序。这个聊天应用程序基本上有一个节点服务器,将广播给多个客户端。在Node代码中,您将看到类似这样的内容。

代码语言:javascript
复制
//Psuedocode
for(client in clients){
  if(client != messageSender){
    user.send(message);
  }
}

这对于较少的用户来说是很棒的,但我看到了一个问题。首先,存在单点故障,即Node服务器。其次,随着客户端数量的增加,应用程序的速度会变慢。那么,当我们到达这个瓶颈时,该怎么办?有没有一种架构(水平/垂直缩放)可以用来缓解这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-18 15:14:50

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

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

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

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

也就是说,在你开始遇到问题之前,你可能必须有几千个并发用户和许多其他问题。

你可以做的另一件事,是尝试开发你的应用程序,这样如果连接丢失(无论如何都会发生),例如。服务器宕机,客户端出现网络问题(例如,移动用户)等,您的应用程序应该能够处理这些问题,并从容地从这些问题中恢复。

票数 4
EN

Stack Overflow用户

发布于 2012-03-16 14:32:13

因为Node.js只有一个事件循环线程,所以这个单点故障会被写入到它的DNA中。即使在代码更改后重新加载服务器,也需要停止此线程。

然而,有很多工具可以优雅地处理此类故障。您可以使用forever;这是一个简单的命令行界面工具,用于确保给定的脚本连续运行。其他选项包括distributeup。Distribute是Node的负载均衡中间件。在分发的基础上构建,使用JavaScript应用程序接口或命令行界面提供零下载时间重新下载:

进一步阅读,我发现您只需要使用Redis Store和Socket.io来维护两个或多个进程/服务器之间的连接引用。这些选项已经在herehere中进行了广泛的讨论。

如果你不打算使用Redis商店,也可以选择使用socket.io-clusterhub

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9732452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档