我正在尝试做的事情:
我编写了一个 node.js 客户端/服务器应用程序,它使用持久的 websocket 连接(无长轮询)。我想对我的服务器进行压力测试,以调整它的性能并了解限制,以便我可以阻止由于过载而导致的新传入连接。不幸的是,我每次都被困在一个特定数量的套接字连接上,因此我认为这可能与操作系统或节点设置有关。
问题:
我有一个创建 10k 套接字连接的客户端,服务器可以很好地处理这个问题。当我用另一个 10k 连接启动第二个客户端时,一旦服务器保持 14k 并发连接,我的客户端应用程序就会开始出现以下错误:
engine.io-client:socket socket close with reason: "transport error" +0ms engine.io-client:socket socket error {"type":"TransportError","description":{"code":"ENOBUFS"," errno":"ENOBUFS","syscall":"connect","address":"127.0.0.1","port":5433,"type":"error","target":{"domain":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);
})
};
正如我已经假设的那样,解决方案是 Windows (MaxUserPort) 中的一个选项,您可以在 regedit 中更改该选项。查看 MSDN 说明以了解更多信息:https : //support.microsoft.com/en-us/kb/196271。您可以将其设置为最大值 65534。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句