我怎样才能基于websocket的Node.js应用程序?

我正在testing使用socket.io和Node.js编写的websockets应用程序的可伸缩性。 我想强调testing和基准性能。 我可以使用哪些工具?

到目前为止,我已经看到了wsbench,但我想探索任何替代品。

Node.js有一个非常简单的Socket.IO客户端实现 。 这不是一个真正的基准testing工具,但它确实知道Socket.IO的协议。

使用它,编写与您的应用程序交互的客户端是相当容易的。

花了一天的时间看着基准node.js和socket.io,我尝试了一些解决scheme,我发现你不能使用wsbench来基准socket.io,因为socket.io有自己的协议,需要解决,使连接。

在尝试了几个其他的解决scheme之后,我没有运气,最后我使用了socket.io-benchmark,并且在一个m1.large EC2实例上只打了60,000个连接,只有一个空间可用的核心。 在我的情况下,我只想测量socket.io连接的开销(这要求我在socket.io-benchmark中注释掉一些代码),所以我没有在客户端和服务器之间发送任何消息。

看到客户端比服务器占用更多的CPU和内存很有趣。 所以请确保你的基准testing客户端服务器是健壮的,我使用了一个EC2 c1.xlarge并有足够的空间。 而且我把基准分成了6个独立的进程,因此可以跨越多个内核进行扩展,避免内存限制。

如果你把所有的缓冲区都设置得很低,并且停下来,要小心地把<rampup in seconds>选项设置得足够高。

socket.io-benchmark唯一的问题是我不得不使用节点v0.4.12来得到所有的工作,因为依赖于v8-profiler,它不会在较新版本的节点(编写)下编译。

https://www.npmjs.org/package/thor

它是一个命令行工具,具有与Apache Bench类似的输出


 Thor:版本:1.0.0

雷神,Odin的儿子和WebSockets的粉碎者!

你应该:
 - 产卵1名工人。
 - 创build2个并发/并行连接。
 - 与强大的Mjölnir粉碎100个连接。

一旦我声称是我的东西,你所寻求的答案就是你的。

连接到ws:// server:8080 / examples / websocket / chat

  打开100个连接


在线439毫秒
所用时间为441毫秒
连接100
断开连接0
失败55
总计转移132.62kB
共收到71.85kB

持续时间(毫秒):

                     最小平均值stddev中值最大值
握手1 5 3 4 20
延迟0 0 1 0 3

百分位数(ms):

                       50%66%75%80%90%95%98%98%100%
握手4 5 5 6 7 11 17 20 20
延迟0 0 1 1 1 1 1 2 3

对于可以build立多less个并发连接的基准testing,我推荐wsbench 。 但是它不适用于Socket.IO站点(因为更复杂的握手)。 我正在研究它,发现了几个工具,只是build立连接到Socket.IO服务器。 衡量真实的performance是不够的。 你需要的是发送和接收真实的消息,模拟真实的客户端的Web应用程序。 我已经介绍了如何在这里创build自己的基准: 关于Node.JS / Socket.IO站点的基准testing