2017-06-29 20 views
1

私はcluster.IOサーバーをクラスタ化し、すべての接続に同じポートを使用する必要があります
これを行うには、エクスプレスサーバーを作成し、構成してからsocket.IOにこれを聞きますサーバー同じポート上のソケットioクラスタ

if(cluster.isMaster){ 
    var cpuCount = require('os').cpus().length; 
    for (let i = 0; i < cpuCount; i += 1) { 
    cluster.fork(); 
} else { 
    const credentials = {key: privateKey, cert: certificate}; 
    const app = express(); 
    const httpsServer = https.createServer(credentials, app); 
    httpsServer.listen(8003); 
    const io = SocketIO.listen(httpsServer); 
} 

しかし、これは複数のサーバーでは機能しません。私は、サーバーのソケットに接続しようとしているとき、私は以下のメッセージを取得:
websocket.js?13d9:112 WebSocket connection to 'wss://...' failed: Error during WebSocket handshake: Unexpected response code: 400

しかし、サーバ側でのイベントリスナーon("connection",() => {})作品。
私はアプリケーションをレンダリングするときにサーバークラスターを作成するためのコードは同じですが、うまくいきます。
ソケットサーバーは、このポートをlistenするsocket.IOサーバーが1つしかない場合に機能します。

クラスタ内の1つのポートに対して複数のsocket.IOリスナーを作成する方法がある場合は、

答えて

1

は最後にSocket.ioがハンドシェイクを実行し、クライアントとの接続を確立するために複数の要求を行っている答え

を見つけました。クラスタでは、これらの要求が異なるワーカーに届く可能性があり、ハンドシェイクプロトコルが破られます。

だから私はsocket.IOためsticky sessionのlibを使用することを決定し、それは私が

を望んでいたとおりに動作します
関連する問題