【发布时间】:2016-10-26 19:02:39
【问题描述】:
我想做的事:
我编写了一个使用持久 websocket 连接(无长轮询)的 node.js 客户端/服务器应用程序。我想对我的服务器进行压力测试,以调整它的性能并了解限制,以便我可以阻止由于过载而导致的新传入连接。不幸的是,我每次都卡在一个特定数量的套接字连接上,因此我认为这可能与操作系统或节点设置有关。
问题:
我有一个创建 10k 套接字连接的客户端,服务器可以完美地处理这个问题。当我用另外 10k 连接启动第二个客户端时,一旦服务器保持 14k 并发连接,我的客户端应用程序就会开始出现以下错误:
engine.io-client:socket 套接字关闭原因:“传输错误” +0ms engine.io-client:socket socket error {"type":"TransportError","description":{"code":"ENOBUFS","errno":"ENOBUFS","syscall":"connect","地址":"127.0.0.1","端口":5433,"类型":"错误","目标":{"域":null,"_events":{},"_eventsCount":4,"_socket" :null,"_ultron":null,"_closeReceived":false,"bytesReceived":0,"readyState":0,"supports":{"binary":true},"extensions":{},"_isServer": false,"url":"ws://127.0.0.1:5433/socket.io/?EIO=3&transport=websocket","protocolVersion":13,"binaryType":"buffer"}}} +0ms
我的 client1.js 和 client2.js 看起来像这样:
function createClient(){
var socket = require('socket.io-client')('http://127.0.0.1:5433', {transports:['websocket']});
socket.connect();
// Send a bit data every 2.5s to simulate a bit traffic
setInterval(function () {
socket.emit("sessionCheck", "ok");
}, 2500);
}
var clients=0;
var id =setInterval(function() {
createClient();
clients++;
if(clients >= 10000)
clearInterval(id);
}, 1);
我的 server.js 如下所示:
var http = require('http');
var httpServer = http.createServer(handler);
var io = require('socket.io')(httpServer, {pingTimeout: 60 * 1000, pingInterval: 5 * 1000});
io.on('connection', function (socket) {
socket.on('sessionCheck', function(data){onSessionCheck(socket,data)});
});
setInterval(function(){
console.log(io.engine.clientsCount + " websockets are connected");
}, 5000);
httpServer.listen(5433, "0.0.0.0", 5000); // port, hostname, backlog
console.log("server running now...");
function onSessionCheck(){
//console.log("Incoming check");
}
function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
})
};
【问题讨论】:
标签: javascript node.js windows sockets socket.io