NodeJS / Socket.io中为1000个用户进行压力testing?

我目前正在研究类似聊天的应用程序。 有用户,聊天室,消息 – 所有这些东西。 该应用程序由Node.js和Socket.IO提供支持。

然而,我有兴趣做的一件事是对应用程序进行压力testing。 目前存在的testing只是一些使用1个客户端的functiontesting。 但是,我想做1000人同时login应用程序,很多人进入聊天室,每个人都在那个房间里发送消息等等。

我怎么去做这个? 谷歌search似乎带来了无关的结果。

我注意到有些人认为这是重复的。 但是,这个问题涉及ASP.NET,使用Selenium是不可能的。 另外,我原本打算得到在node.js框架内特殊操作的答案。 另一个开发者(不再是团队的一部分)写了一些压力testing,包括定义一个自定义的用户对象,迭代地注册这些用户,join一个房间等。这些testing是不完整的,不再可用,尽pipe因为代码库中的很多东西已经改变因为他们写了。 无论如何,答案以某种方式允许压力testing应用程序的另一种方式是可以接受的。

编辑:这是我的压力testing与许多用户的尝试。

function client() { // Define a testing client that responds to socket io events and the like } ... testers = []; for (int i = 0; i <= 1000; i++) testers.push(new client()); // Each client connects to server with option 'force new connection: true' it('Should login many users simultaneously') { // Use async.each on testers // Use client.login() on each client. } 

我发现这是有问题的。 login大约250个用户后,testing不会进行。 这里有什么问题? 难道这与Node.js和socket.io的限制有关吗?

我和我的团队解决scheme如下:

我们在自己的文件( client.js )中定义了一个Client对象,并在事件等中定义了响应Socket.IO的各种操作和事件。 在test.js文件中,我们将实例化Client对象的许多实例,创build许多连接和客户端。

我们遇到的限制可能涉及运行testing的计算机的function(虽然承载服务器的设备可以使用1000个用户运行testing)。

您可以使用Apache JMeter工具,您可以使用单个客户端模拟N个并发用户。

跟随,例如,Apache ab。

只需创build一个API(仅用于testing目的),并使用该API的端点从apache ab发送大量消息。

 ab -n 1000 -c 10 -T 'multipart/form-data; boundary=1234567890' -p post.txt http://yourdomain.com/yourproject/api/sendmessage/ 

post.txt将包含像这样的东西:

 --1234567890 Content-Type: application/x-www-form-urlencoded Content-Length: 30 from=myId&to=yourId&message=alrighty <base64 data> --1234567890 

其中base64数据应该是一个长string,表示(base64)该POST请求的数据。