Chcę porównać mój serwer socket.io. Chcę przetestować liczbę równoległych połączeń i komunikatów obsługiwanych przez serwer.Benchmarkt socket.io
Ale moja awarii serwera socket.io po kilku minutach, gdy zaczynam benchmark z około 200 websockets.
Próbowałem użyć modułu klastra node.js, aby udostępnić proces rdzeniom. Kiedy korzystam z modułu klastra, niektóre połączenia zostają rozłączone po pewnym czasie.
Serwer, używać do badania jest serwera wirtualnego w chmurze AmazoniÄ ogłoszenia:
- 7 GB pamięci
- 20 EC2 Obliczenie jednostek (8 wirtualne rdzenie 2,5 jednostek EC2 Compute każdy)
- 1690 GB pamięci instancji
- 64-bitowej platformie
- I/o Wydajność: Wysoka nazwa
- API c1.xlarge
Oto kod z benchmark-client:
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());
}
}
I tu kod socket.io serwera:
socket.on('message',function(message){
start = new Date().getTime();
socket.send(message);
end = new Date().getTime() - start;
logfile.write(end+"\n");
});
Czy istnieją jakieś mechanizmy zabezpieczające na gnieździe. io, która blokuje tak wiele równoległych komunikatów i połączeń z klientem?
Czy ktoś może mi pomóc?
Jaki błąd node.js druk na katastrofie? –
node.js drukuje tylko po zawieszeniu się słowa "Killed". – CodeChiller
Może to być po prostu dlatego, że brakuje ci deskryptorów plików. Spróbuj uruchomić 'ulimit -n' jako tego samego użytkownika, na którym działa node.js (jeśli masz przynajmniej Linuksa). Możesz zmienić tę wartość, używając 'ulimit' lub, trwale, w pliku konfiguracyjnym, takim jak'/etc/security/limits. {Conf, d} '. –