node.js - 可以模拟多个并发连接来测试 nodejs 应用程序

标签 node.js websocket socket.io localhost

我有一个运行@localhost 的简单 node.js/socket.io (websockets) 应用程序。我正在尝试查看它可以处理多少个并发连接。是否可以在本地主机上模拟多个并发用户?

这是我使用 socket.io-client 的半成品尝试:

function connectAndSend(){
    socket.emit('qand',{
        code :'ubuntu'
    });
} 
socket.on('connect', function () {
});
socket.on('q', function (data) {
    console.log(data);
});

function callConnect(){
    console.log('calling');
    connectAndSend() ;
    setTimeout(callConnect,100) ;
}

callConnect() ;

在我看来,这只会每 100 毫秒“发出”一条新消息,并且不会模拟并发连接。

最佳答案

在调用 connect 时,您必须告诉 socket.io 为每次调用 connect 创建一个新连接。例如:

var socket = io.connect(server, { "force new connection": true });

此外,如果您想提高出站 TCP 连接限制(似乎默认为每个目标 5 个连接),请执行以下操作

require('http').globalAgent.maxSockets = 1000;

连接之前。

但请注意,快速创建和关闭 tcp 套接字会使 TCP 连接堆积在 TIME_WAIT 状态,这取决于您的 OS and your network settings您很快就会达到极限,这意味着您必须等待那些旧套接字超时才能建立新连接。 如果我没记错的话,Windows(Server 2008 R2 和 Windows 7)上的限制是大约 16k 个连接(每个目标 ip/端口组合),Windows 中的默认 TIME_WAIT 超时是 4 分钟,所以如果您在 Windows 上 4 分钟内创建超过 16k 个连接,您可能会撞墙。

关于node.js - 可以模拟多个并发连接来测试 nodejs 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16810148/

相关文章:

node.js - 自定义模型验证器 SailsJS

arrays - Angular 2 - 从嵌套数组创建 CSV 文件

flutter - Flutter和Phoenix channel 的问题

redis - 每个用户一个 redis channel ?

ios - swift 包管理器 'cannot find target' 错误消息

node.js - Google Cloud Tasks 在 5 分钟后重新排队任务,忽略更大的 dispatchDeadline 设置

Java 注释和 websocket - 为什么使用注释而不是传统方法?

websocket - sailsjs-在应用程序级别跟踪房间的最佳方法是什么

java - Android socket连接使用socket.io 0.9.0版本

javascript - 创建一个 npm 控制台应用程序,即 "installable"(如 yeoman 或 gulp 或 grunt 等..)