socket.io サーバーのベンチマークを行いたい。サーバーが処理できる並列接続とメッセージの数をテストしたいと思います。
しかし、約 200 個の Websocket でベンチマークを開始すると、socket.io サーバーが数分後にクラッシュします。
node.jsのclusterモジュールを使って処理をコアに共有してみました。クラスター モジュールを使用すると、しばらくすると一部の接続が切断されます。
テストに使用するサーバーは、次のプロパティを持つ amazon クラウド上の仮想サーバーです。
- 7GBのメモリ
- 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-server のコードがあります:
socket.on('message',function(message){
start = new Date().getTime();
socket.send(message);
end = new Date().getTime() - start;
logfile.write(end+"\n");
});
非常に多くの並列メッセージとクライアントからの接続をブロックする socket.io のセキュリティ メカニズムはありますか?
誰でも私を助けることができますか?