J'utilise websockets/ws sur une seule machine. Cela fonctionne bien. Je veux l'échelle horizontalement sur multi-core et sur plusieurs instances. Pour mutli-core j'ai essayé avec pm2 et il semble fonctionner très bien.Mise à l'échelle des Websockets/ws avec plusieurs instances de serveur
Premier Q: Est-ce la meilleure approche ou approche appropriée? Voici mon code d'essai avec 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')
});
et les instances WebSocket client
// 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)
}
});
Il suffit de lancer le serveur et le client avec PM2
$ pm2 start ws-server.js -i 50
$ pm2 start ws-client.js -i 50
Et si vous voyez le journal pm2 logs ws-client
chaque le client frappe la même connexion (au serveur) chaque seconde. Donc, pour ws multi-core fonctionne bien avec PM2.
Deuxième Q: comment mettre à l'échelle avec plusieurs instances? Je viens de voir SocketCluster pour la mise à l'échelle horizontale, mais peut-il être utilisé avec websockets/ws comme j'ai déjà développé le code avec ws. Quelle pourrait être l'autre solution pour la mise à l'échelle horizontale?
Dmitrii merci, je vais passer par cette lib – Gagan