最近使用 socket.io 做了一个实时应用,实时性、稳定性还是很让人满意的。如果拿 socket.io 来做小型应用,综合效率应该是最高的。但是网上少有 socket.io 做大量连接测试的案例,这是比较让人担心的一点,socket.io 是否适合做具有大量连接场景的需求呢?Trello 其实就是用 socket.io 来处理实时通信的,而且 trello 目前已经有数百万的用户了,所以从这点看,socket.io 的规模应用应该还是可行了。
为了以防万一,我想拿 websocket([https://github.com/websockets/ws][1])做后备应用,并且找到了国外网友的测试代码,我稍微改了下,代码比较简单,自己写一份也可以,但对于了解一台普通的 PC 能够支撑的连接数量,已经够了。测试的结果也比较满意,以后可以放心用 websocket 来做应用了。
测试的内容包括:
- win7 测试
- win7 修改 PC 最大连接数
- ubuntu14.04 测试
- ubuntu14.04 修改最大连接数
在 win7 中测试时,如果不修改 win7 的注册表连接限制,server 只能接收 13K 左右的连接,再继续建立连接时,就会报 event.js 的错误
步骤:
保存,然后重新运行 client 连接,可以发现已经可以突破默认的限制了。我只加到了 30K 连接,没有再继续加多。【在 linux 服务测试中,需要 win7 有足够的连接。】
测试条件:
测试现象:
步骤:
- * hard nofile 1000000
- * soft nofile 1000000
- session required pam_limits.so
注意:我没有调整 linux 内存方面的设置,仅仅只是调整了分配给虚拟机的内存
- ulimit - SHn 51200
我不想在这里妄下结论,只是测试现象可以让我确定,nodejs 使用 websocket 来处理大量连接的场景是可行的。
[1]: https://github.com/websockets/ws
来源: http://www.cnblogs.com/sylarmeng/p/7352943.html