2017-10-24 20 views
1

1つのポートで開かれた接続の数を制限することを試みています。だから私は、例えば、異なるポート上で実行している私のサーバーの複数のインスタンスを作成する方法を考えた:socket.io router、複数のインスタンスの1つに割り当てよう

  • インスタンス1(3001)server_i1.js
  • インスタンス2(3002)server_i2.js
  • インスタンス3(3003)server_i3.js
  • インスタンス4(3004)server_i4.js

その後、私はどのように多くの接続をチェックしますつの追加のファイルserver_route.jsを持つことができますイオンは各インスタンス上に確立され、ユーザーを少人口化されたインスタンスに転送します。私はクラスタを使って何かをビルドしようとしましたが、同じポート上で新しいプロセスを作成するように見えます。すべてのユーザーをたとえばhttp://exmaple.com:3000に接続してから、可能な4つのポートのうちの1つに転送するにはどうすればよいですか[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); 

} 

答えて

1

たぶん、ラウンドロビンを使うのか?サンプル実装は次のようになります。クライアント側1で

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); 
+0

を行うだろう、これは本当に良い考えである、唯一の問題は、サーバー間で負荷を分散する方法となり、あなたはどんな考えを持っていますどのように? – Mevia

+0

@mevia thatsラウンドロビンのこと。接続が多い場合、ワークロードはサーバ間で均等に分散されます... –

関連する問題