我想对我的socket.io服务器进行基准测试。我想测试服务器可以处理多少并行连接和消息。然而,当我使用约200个WebSocket开始基准测试时,我的socket.io服务器会在几分钟后崩溃。
我尝试使用node.js的cluster模块将进程分配到各个核心上。但是在使用cluster模块后,一些连接会在一段时间后断开。
我用于测试的服务器是亚马逊云上的虚拟服务器,具有以下属性:
7 GB内存
20个EC2计算单元(每个具有2.5个EC2计算单元的8个虚拟核心)
1690 GB实例存储
64位平台
I/O性能:高
API名称:c1.xlarge 这是基准测试客户端的代码:
我尝试使用node.js的cluster模块将进程分配到各个核心上。但是在使用cluster模块后,一些连接会在一段时间后断开。
我用于测试的服务器是亚马逊云上的虚拟服务器,具有以下属性:
7 GB内存
20个EC2计算单元(每个具有2.5个EC2计算单元的8个虚拟核心)
1690 GB实例存储
64位平台
I/O性能:高
API名称:c1.xlarge 这是基准测试客户端的代码:
var fs = require('fs');
var io = require("socket.io-client");
var host = "http://localhost:3000";
var timeLog = fs.createWriteStream(__dirname+'/public/time.log',{flags:'a',mode:0666, encoding:'encoding'});
var count = 200;
var sockets = [];
var total = 0;
var countTime = 0;
var echo = exports;
echo.start = function() {
fs.writeFile('public/time.log',"",function(err){
if(err) throw err;
});
for(var i=0;i<count;i++){
var socket = io.connect(host,{"force new connection":true});
sockets.push(socket);
//console.log(i);
socket.on("message",function(message){
countTime++;
time = new Date().getTime()-message;
total+=time;
timeLog.write(time+"\n");
socket.send(new Date().getTime());
});
socket.on("disconnect",function(){
console.log("disconnect");
});
}
parallelSockets();
var j = 0;
}
function parallelSockets(){
for(var i = 0 ;i<count;i++){
sockets[i].send(new Date().getTime());
}
}
以下是socket.io服务器端的代码:
socket.on('message',function(message){
start = new Date().getTime();
socket.send(message);
end = new Date().getTime() - start;
logfile.write(end+"\n");
});
socket.io是否有安全机制来阻止客户端发送太多的并行消息和连接?
有人可以帮我吗?
ulimit -n
(如果您至少在Linux上)。您可以使用ulimit
更改此值,或者更永久地,在配置文件中,例如/etc/security/limits.{conf,d}
。 - Linus Thiel