2017-10-20 4 views
0

私はwebsockets/wsを単独のマシンで使用しています。そのうまく動作します。マルチコアと複数のインスタンスで水平にスケーリングしたい。 mutli-coreの場合、私はpm2で試してみました。複数のサーバーインスタンスでwebsockets/wsを調整する

最初の質問:これは最善のアプローチか適切なアプローチですか?あなたは今、ログpm2 logs ws-clientそれぞれを見ればここPM2と私のテストコード

// ws-server.js 
const WebSocket = require('ws'); 

const wss = new WebSocket.Server({ port: 3131 }); 

var pid = process.pid + '' 
console.log('process pid: '+ pid) 

wss.on('connection', function connection(ws) { 
    ws.on('message', function incoming(message) { 
    if (message === 'get-pid') { 
     ws.send('pid-' + pid) 
    } else { 
     var matched = pid === message ? 'old friends' : 'strangers' 
     ws.send([pid, message, 'we are ' + matched].join(', ')) 
    } 
    }); 
    ws.send('first time') 
}); 

とクライアント用WebSocketインスタンスが

// ws-cient.js 
const WebSocket = require('ws'); 
const ws = new WebSocket('ws://localhost:3131/'); 

var pid 
ws.on('open', function open() { 
    ws.send('get-pid'); 
    setInterval(function() { 
    ws.send(pid) 
    }, 1000) 
}); 

ws.on('message', function incoming(data) { 
    if (/^pid/.test(data)) { 
    pid = data.match(/\d+/)[0] 
    console.log('got pid: ' + pid) 
    } else { 
    console.log(data) 
    } 
}); 

ちょうどPM2

$ pm2 start ws-server.js -i 50 
    $ pm2 start ws-client.js -i 50 

と、サーバーとクライアントを実行され、クライアントは1秒ごとに同じ接続(サーバーで)に遭遇します。 マルチコアwsはPM2とうまく動作します。

第2質問:複数のインスタンスでどのようにスケールするのですか? 水平スケーリングのためにSocketClusterを見ただけですが、すでにwsでコードを開発しているのでwebsockets/wsとともに使用できます。水平スケーリングのための他の解決策は何でしょうか。

答えて

1

残念ながら、異なるプロセス間でのWebSocketをスケーリングすることは困難になるだろう、私はあなたがこのライブラリを使用することをお勧め:

https://github.com/ClusterWS/ClusterWS

このライブラリの主な目的は、プロセスやマシン間でWebSocketを拡張することです。 また、良いことは、ライブラリが小さくて速いことです。

+0

ドミトリーおかげで、私はこのlib – Gagan

関連する問題