Benchmarkt socket.io

我想基准我的socket.io服务器。 我想testing服务器可以处理多less个并行连接和消息。

但是我的socket.io服务器在几分钟后崩溃了,当时我开始使用大约200个websocket进行基准testing。

我尝试使用node.js的集群模块将进程共享到内核。 当我使用集群模块时,一段时间后有些连接会断开。

我用于testing的服务器是具有以下属性的亚马逊云上的虚拟服务器:

  • 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-server的代码:

 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服务器实现进行了基准testing。

结果可以在这里find: http : //mrjoes.github.com/2011/12/15/sockjs-bench.html

testing套件在这里: https : //github.com/mrjoes/sock-benchmarking

用Java编写,支持3个传输:Socket.IO 0.7+,SockJS 0.2+,原始的Websocket。 没有编译好的二进制文件,但是你可以让Eclipse编译它,或者使用命令行javac。

我本人没有对Socket.IO进行基准testing,但是我知道有两个很好的资源可以帮助您,所以请检查一下:

你可以检查Akinji

它打开服务器的并发套接字,并侦听给定的消息并打印它们

http://github.com/sonsuzdongu/akinji

 python akinji.py -c 100 --host localhost --port 3000 --waitFor 100 --on "some msg"