6

我想对我的 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-server的代码:

socket.on('message',function(message){
    start = new Date().getTime();
    socket.send(message);
    end = new Date().getTime() - start;
    logfile.write(end+"\n");
});

socket.io 上是否有任何安全机制可以阻止如此多的并行消息和连接形成客户端?

有谁能够帮我?

4

3 回答 3

4

我对 Socket.IO 和 SockJS 服务器实现进行了基准测试。

这是结果

测试套件

用 Java 编写,支持 3 种传输:Socket.IO 0.7+、SockJS 0.2+、原始 Websockets。没有已编译的二进制文件,但您可以让 Eclipse 编译它或只使用命令行 javac。

于 2012-06-11T10:23:41.807 回答
3

我自己没有对 Socket.IO 进行基准测试,但我知道 2 个可能对您有帮助的好资源,因此请查看它们:

于 2012-06-11T09:44:54.073 回答
0

你可以检查Akinji

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

http://github.com/sonsuzdongu/akinji

python akinji.py -c 100 --host localhost --port 3000 --waitFor 100 --on "some msg"
于 2016-01-22T18:49:14.503 回答