我想对我的 socket.io 服务器进行基准测试。我想测试服务器可以处理多少个并行连接和消息。
但是当我使用大约 200 个 websocket 启动基准测试时,我的 socket.io 服务器在几分钟后崩溃。
我尝试使用node的集群模块.js将过程共享给核心。当我使用集群模块时,一些连接会在一段时间后断开连接。
我用于测试的服务器是亚马逊云上的虚拟服务器,具有以下属性:
- 7 GB 内存 20 个 EC2 计算单元
- (8 个虚拟核心,每个核心 2.5 个 EC2 计算单元)
- 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 上是否有任何安全机制阻止从客户端形成如此多的并行消息和连接?
有人可以帮助我吗?
我对 Socket.IO 和SockJS服务器实现进行了基准测试。
以下是结果
测试套件
用Java编写,支持3种传输:Socket.IO 0.7+,SockJS 0.2+,原始Websockets。没有编译的二进制文件,但你可以让 Eclipse 编译它,或者只使用命令行 javac。
自己进行基准 Socket.IO 测试,但我知道 2 个可能对您有所帮助的好资源,因此请查看它们:
- http://drewww.github.com/socket.io-benchmarking/
- http://blog.mixu.net/2011/11/22/performance-benchmarking-socket-io-0-8-7-0-7-11-and-0-6-17-and-nodes-native-tcp/
你可以检查Akinji
。它打开服务器的并发套接字并侦听给定的消息并打印它们
http://github.com/sonsuzdongu/akinji
python akinji.py -c 100 --host localhost --port 3000 --waitFor 100 --on "some msg"