2017-10-20 21 views
0

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?

Répondre

1

Malheureusement, il va être difficile à l'échelle Websocket à différents processus, je vous suggère d'utiliser cette bibliothèque:

https://github.com/ClusterWS/ClusterWS

Le but principal de cette bibliothèque est à l'échelle WebSocket à travers les processus et les machines . Aussi, la bonne chose est que la bibliothèque est petite et rapide.

+0

Dmitrii merci, je vais passer par cette lib – Gagan