Quiero comparar mi servidor socket.io. Quiero probar cuántas conexiones y mensajes en paralelo puede manejar el servidor.Benchmarkt socket.io
Pero mi servidor socket.io se cuelga después de algunos minutos cuando comienzo el benchmark con aproximadamente 200 websockets.
Intenté utilizar el módulo de clúster de node.js para compartir el proceso con los núcleos. Cuando uso el módulo de clúster, algunas conexiones se desconectan después de un tiempo.
El servidor que utilizo para la prueba es un servidor virtual en la nube de Amazon con estas propiedades:
- 7 GB de memoria
- 20 Unidades Compute EC2 (8 núcleos virtuales con 2,5 unidades EC2 cada uno)
- 1690 GB de almacenamiento de instancia
- 64-bit plataforma
- Rendimiento I/O: High nombre
- API: c1.xlarge
Este es el código de la referencia en el cliente:
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());
}
}
Y aquí el código de la socket.io-servidor:
socket.on('message',function(message){
start = new Date().getTime();
socket.send(message);
end = new Date().getTime() - start;
logfile.write(end+"\n");
});
¿Hay algún mecanismo de seguridad en zócalo. io que bloquea tantos mensajes paralelos y conexiones forman un cliente?
¿Alguien me puede ayudar?
¿Qué error de impresión en Node.js accidente? –
node.js imprime solo al bloquear la palabra "Asesinado". – CodeChiller
Puede ser simplemente porque se está quedando sin descriptores de archivo. Intenta ejecutar 'ulimit -n' como el mismo usuario que ejecuta node.js (si estás en Linux, al menos). Puede cambiar este valor usando 'ulimit' o, más permanentemente, en un archivo de configuración como'/etc/security/limits. {Conf, d} '. –