2012-04-15 142 views
21

我收到了一个实现broadcast.emit的网站。向该网站的所有用户发送消息。这只是socket.io的最简单实现,但我目前遇到问题。当我碰到大约100个并发用户时。 nodejs服务器开始滞后,直到它挂起,我不能再访问我的整个网站。当我们检查服务器时。 nodejs占用了CPU的100%。这是正常的吗?Nodejs&Socket.io可以支持多少用户?

我想知道有多少用户可以socket.io支持?当发生这种情况时,是否有一种方法可以以编程方式重新启动nodejs服务器?

+1

你能给我们一些关于服务器规格的信息吗? – UpTheCreek 2012-09-14 20:41:48

回答

15

At least 250k并发连接(对于大多数使用情况的瓶颈是内存)

+0

谢谢安德烈。其实在服务器内存中没有问题。它使用的服务器内存少于5%。此外,我忘了提及nodejs与我的web&db服务器在同一个框中。 – 3s2ng 2012-04-15 16:32:08

+11

上面引用的250k是一个HelloWorld类型的基准,没有socket.io。实际上,c10k接近真实(取决于您的CPU和应用程序的复杂性)。例如,对于我正在运行的纸牌游戏,我在c3k时的CPU使用率达到了100%。 – 2012-09-12 12:24:22

+1

1m并发连接 - http://blog.caustik.com/2012/08/19/node-js-w1m-concurrent-connections/ – 2012-09-13 00:20:33

3

它是至关重要的,您不必放弃它传递消息给所有的客户端?如果不是,我会建议使用socket.volatile.emit调用。远程客户端和非稳定连接可能存在很多问题。

+0

传递给客户的信息很重要。因此,所有用户的数据应始终同步更新。如果我要使用volatile,那意味着如果用户失去连接,用户将不会收到消息。随后他们会有机会收到最新的消息吗?使用易失性的任何其他缺点? – 3s2ng 2012-04-16 06:24:40

+2

当发送当前消息数据替换客户端上的先前数据(即,使通过相同呼叫发送的先前消息过时)时,我会使用'socket.volatile.emit'。 – 2012-08-22 20:52:19

18

我有一个多人纸牌游戏。 Socket.io使我的CPU在大约3000个并发用户中最大化。这是Intel i7 CPU。因此,我必须运行多个node/socket.io进程来处理负载。

对于100个并发连接,你应该没问题。也许你正在使用一些VPS并且CPU与所有其他VM共享?你运行专用服务器吗?

此外,请检查您的代码。你可能会同步做一些应该异步的东西。

+0

如果您要使用集群模块并使用更多核心,那么这个数字会增加吗?还是你已经在使用集群模块? – 2013-01-31 07:05:53

+8

目前,我使用HAProxy作为前端运行7个节点进程。大约有9000个并发用户(每个节点约1300个),一切正常。全部在一台服务器上。 – 2013-01-31 11:39:21

+0

很高兴知道,谢谢你的回复。 – 2013-02-01 14:40:01

相关问题