socket.io路由器,分配给多个实例之一

我试图克服TCP协议可以在单个端口上打开多less个连接的限制。 所以我想到了一种方法来创build我的服务器运行在不同的端口上的多个实例,例如:

  • 实例1(3001) server_i1.js
  • 实例2(3002) server_i2.js
  • 实例3(3003) server_i3.js
  • 实例4(3004) server_i4.js

那么我可以有一个额外的文件server_route.js ,将检查每个实例上build立了多less连接,并将用户转发到较less的实例。 我尝试使用集群构build一些东西,但似乎只是在同一个端口上创build新的进程。 如何让所有用户连接到http://exmaple.com:3000 ,然后将它们转发到四个可能的端口之一[3001, 3002, 3003, 3004]

目前的服务器方法

 var cluster = require('cluster'); var numCPUs = require('os').cpus().length; if(cluster.isMaster) { for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', function(worker, code, signal) { console.log('worker ' + worker.process.pid + ' died'); }); } else { var http = require('http'), _io = require('socket.io'), server = http.createServer(); server.listen('3000', 'example.com'); var io = _io.listen(server); var connections = {}, msg_sent = 0; io.on('connection', function(socket) { connections[socket.id] = new Date().getTime(); socket.on('client-request', function(msg) { msg_sent++; }); socket.on('disconnect', function() { delete connections[socket.id]; }); }); setInterval(function() { console.log( 'Active connections: ', Object.keys(connections).length, 'Messages sent: ', msg_sent ); }, 1000); } 

也许使用循环赛? 示例实现如下所示:

  const ports = ["3001"," 3002", "3003"]; var current = 0; io.on('connection', function(socket) { socket.emit("redirect",ports[current]); current = (current + 1) % ports.length; }); 

在客户端会做

 (function start(port){ const socket = io("http://localhost:"+port); socket.on("redirect", port => (socket.close(), start(port))); //whatever })(3000);