Arquitetura escalável para socket.io
Eu sou novo no socket.io e no Nó JS e estou tentando criar um aplicativo escalável com um alto número de conexões de soquete simultâneas (mais de 10.000).
Atualmente, iniciei um modelo em que meu servidor cria um processo filho e todo processo filho escuta uma porta específica com uma instância sicket.io conectada. Depois que um cliente se conecta, ele é redirecionado para uma porta específica.
A grande questão é: ter várias instâncias socket.io em várias portas aumenta o número de conexões possíveis?
Aqui está o meu código, apenas no caso:
Servidor
var server = http.createServer(app);
server.childList = [];
for (var i = 0; i < app.portList.length; i++) {
server.childList[i] = require('child_process').fork('child.js');
}
server.listen(3443, () => {
for (var i = 0; i < app.portList.length; i++) {
server.childList[i].send({ message: 'createServer', port: app.portList[i] });;
}
});
child.js:
var app = require('./app');
var http = require('http');
var socket_io = require( "socket.io" );
process.on('message', (m) => {
if (m.message === 'createServer') {
var childServ = http.createServer(app);
childServ.listen(m.port, () => {
console.log("childServ listening on port "+m.port);
});
var io = socket_io();
io.attach( childServ );
io.sockets.on('connection', function (socket) {
console.log("A client just connected to my socket_io server on port "+m.port);
});
}
});
Sinta-se livre para liberar o kraken se eu fiz algo horrível lá