0
我在單臺機器上使用websockets/ws。它的工作正常。我想在多核和多個實例上水平擴展它。 對於多核心我試過pm2,它似乎工作很好。擴展具有多個服務器實例的websockets/ws
第一個問:這是最好的方法還是合適的方法?下面是我的測試代碼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
如果你現在看到的日誌pm2 logs ws-client
各客戶端每秒都會訪問相同的連接(在服務器上)。 因此對於多核心ws可以很好地與PM2配合使用。
第二個問題:如何用多個實例進行縮放? 我剛剛看到SocketCluster水平縮放,但它可以與websockets/ws一起使用,因爲我已經開發了ws代碼。什麼可能是水平縮放的其他解決方案。
Dmitrii謝謝,我會通過這個庫 – Gagan