我正在测试我使用socket.io和Node.js编写的websockets应用程序的可伸缩性。我想强调测试并对性能进行基准测试。我可以使用哪些工具?
到目前为止,我已经研究过wsbench,但我想探索任何替代方案。
答案 0 :(得分:10)
花了一天时间研究基准测试node.js和socket.io,我尝试了很多解决方案,我发现你不能用wsbench来测试socket.io,因为socket.io有自己的协议需要解决这个问题。
在尝试了其他一些没有运气的解决方案后,我最终使用了socket.io-benchmark,我只使用一个核心,在m1.large EC2实例上打了60,000个连接。在我的情况下,我只想测量socket.io连接的开销(这需要我在socket.io-benchmark中注释掉一些代码)所以我没有在客户端和服务器之间发送任何消息。
有趣的是,客户端占用的CPU和内存比服务器多。因此,请确保您正在进行基准测试的客户端服务器非常强大,我使用了EC2 c1.xlarge并且有足够的空间。我将基准测试分为6个单独的进程,因此可以扩展到多个内核并避免内存限制。
注意在客户端上设置<rampup in seconds>
选项足够高,如果将其设置为低,则将所有缓冲区设置为低并停止研磨。
socket.io-benchmark的唯一问题是我必须使用节点v0.4.12才能使它全部工作,因为它依赖于v8-profiler,它不能在较新版本的节点下编译(截至编写)。
答案 1 :(得分:4)
Node.js有一个非常简单的Socket.IO client implementation。它不是一个真正的基准测试工具,但它确实了解Socket.IO的协议。
使用它,编写与您的应用程序交互的客户端相当容易。
答案 2 :(得分:3)
https://www.npmjs.org/package/thor
它是一个命令行实用程序,具有与Apache Bench
类似的输出Thor: version: 1.0.0 God of Thunder, son of Odin and smasher of WebSockets! Thou shall: - Spawn 1 workers. - Create 2 concurrent/parallel connections. - Smash 100 connections with the mighty Mjölnir. The answers you seek shall be yours, once I claim what is mine. Connecting to ws://server:8080/examples/websocket/chat Opened 100 connections Online 439 milliseconds Time taken 441 milliseconds Connected 100 Disconnected 0 Failed 55 Total transferred 132.62kB Total received 71.85kB Durations (ms): min mean stddev median max Handshaking 1 5 3 4 20 Latency 0 0 1 0 3 Percentile (ms): 50% 66% 75% 80% 90% 95% 98% 98% 100% Handshaking 4 5 5 6 7 11 17 20 20 Latency 0 0 1 1 1 1 1 2 3
答案 3 :(得分:0)
对于可以设置多少并发连接的基准测试,我建议wsbench。但是它不适用于Socket.IO站点(因为更复杂的握手)。我正在研究它,发现了一些工具只是建立了与Socket.IO服务器的连接。这还不足以衡量真实的表现。 您需要的是发送和接收模拟Web应用程序真实客户端的真实消息。我在这里描述了一些关于如何创建自己的基准的想法:Benchmarking for Node.JS / Socket.IO sites