Frage

Ich habe eine nodejs-chat-app, in dem mehrere clients eine Verbindung zu einem gemeinsamen chat-Raum mit socketio.Ich skalieren möchten diese auf mehreren Knoten Prozesse, die möglicherweise auf verschiedenen Maschinen.Jedoch, clients, die eine Verbindung zu der selben Zimmer nicht garantiert werden, schlagen Sie die gleiche node-Prozess.Für Beispiel, Benutzer 1 Treffer Knoten Ein Prozess und Benutzer 2 Treffer node-Prozess B.Sie sind in die gleichen Raum, so dass, wenn Benutzer 1 eine Nachricht sendet, wird Benutzer 2 verwenden, sollten Sie es bekommen.Was ist der beste Weg, um dies zu verwirklichen, da Ihre verbindungen verwaltet werden durch verschiedene Prozesse?

Ich dachte darüber nach, nur den Knoten Prozesse eine Verbindung zu redis.Zumindest löst das problem, dass Ein Prozess wird weiß es gibt andere Benutzer, Benutzer 2, in dem Raum, aber es kann immer noch nicht senden Benutzer 2 da Prozesses B-Steuerelemente, die Verbindung.Gibt es eine Möglichkeit zu registrieren, ein "Wert geändert" Rückruf für redis?

Ich bin in einer server-Umgebung, wo ich kann nicht Steuern, das routing oder load balancing.

War es hilfreich?

Lösung

Beide node.js Prozesse können abonniert werden einige Kanal, über redis pub/sub und hören Sie auf Nachrichten, die Sie an diesem Kanal.Für Beispiel, wenn Benutzer 1 verbindet zu Prozess A auf der ersten Maschine, Sie können Shop in redis Informationen über diesen Benutzer zusammen mit den Informationen, die Prozess auf die Maschine schafft es.Dann, wenn der Benutzer 2, die ist verbunden mit Prozess B auf die zweite Maschine, eine Nachricht sendet, um Benutzer 1, können Sie Sie veröffentlichen auf diesem Kanal und schauen Sie, welcher Prozess auf welche Maschine ist verantwortlich für die Verwaltung der Kommunikation mit Benutzer 1 und entsprechend reagieren.

Andere Tipps

Ich habe einige Nachforschungen daran durchgeführt. Unter meinen Erkenntnissen:

Wie Yojimbo87 sagte, Sie verwenden zuerst REDIS Pub/Sub (ist sehr optimiert).

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

Tim Caswell schrieb:

Ich habe die Erfahrung gemacht, dass der Engpass die Serialisierung und De-Serialisierung der Daten ist, nicht der tatsächliche Kanal. Ich bin mir ziemlich sicher, dass Sie benannte Pipes verwenden können, aber ich bin mir nicht sicher, was die API ist. MSGPack scheint ein gutes Format für den Datenaustausch zu sein. Es gibt einige Bibliotheken, die MSGPack- oder IPC -Frameworks darüber implementieren.

Aber wenn Serialisierung / Deserialisierung zu Ihrem Flaschenhals wird, würde ich versuchen zu verwenden https://github.com/pgriess/node-msgpack. Ich möchte das auch testen, denn ich denke, je früher Sie das besser haben?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top