Domanda

Ho un nodejs app di chat in cui più client si connettono a una chat room comune utilizzando socketio. Voglio scalare questo per molteplici processi nodi, possibilmente su macchine diverse. Tuttavia, i client che si connettono alla stessa stanza non saranno garantiti per colpire lo stesso processo nodo. Per esempio utente 1 colpirà processo nodo A e l'utente 2 colpirà processo nodo B. Sono nella stessa stanza in modo se l'utente 1 invia un messaggio, l'utente 2 dovrebbe ottenerlo. Qual è il modo migliore per fare questo accadere dal momento che le loro connessioni sono gestite da diversi processi?

ho pensato solo che hanno i processi di nodo si collegano a Redis. Questo almeno risolve il problema che processo A sarà so c'è un altro utente, utente 2, in camera, ma ancora non può Invia per l'utente 2 perché i controlli di processo B che connessione. C'è un modo per registrare un "valore cambiato" callback per Redis?

Sono in un ambiente server in cui non posso controllare qualsiasi del bilanciamento di routing o del carico.

È stato utile?

Soluzione

Sia Node.JS processi possono essere sottoscritte in qualche canale attraverso Redis pub / sub e ascoltare i messaggi che si passa a questo canale. Ad esempio, quando l'utente 1 si connette a un processo sul primo computer, si possono memorizzare in redis informazioni su questo utente insieme alle informazioni quale processo su quale macchina gestisce. Poi, quando l'utente 2, che è collegato al processo di B sulla seconda macchina, invia un messaggio all'utente 1, è possibile pubblicarlo su questo canale e verificare quale processo su quale macchina è responsabile per la gestione della comunicazione con l'utente 1 e rispondere di conseguenza.

Altri suggerimenti

ho fatto (fatto) qualche ricerca su questo. Qui di seguito i miei risultati:

Come yojimbo87 detto per la prima volta basta usare Redis pub / sub (è molto ottimizzato).

http://comments.gmane.org/gmane.comp. lang.javascript.nodejs / 22348

Tim Caswell ha scritto:

E 'stata la mia esperienza che il collo di bottiglia è la serializzazione e de-serializzazione dei dati, non il canale attuale. sono abbastanza sicuro è possibile utilizzare named pipe, ma non sono sicuro di quello che l'API è. msgpack sembra un formato di buono per l'interscambio dei dati. Ci sono alcuni librerie là fuori che implementano msgpack o quadri IPC in cima esso.

Ma quando la serializzazione / deserializzazione diventa il tuo collo di bottiglia Vorrei provare a utilizzare https://github.com / pgriess / node-msgpack . Vorrei anche per testare il tutto, perché penso che la prima si dispone di questo il migliore?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top