2016-05-24 8 views
0

In einer Node-Anwendung, die Websockets bedient, in denen Benutzer mehrere veröffentlichte Themen abonnieren und neue Updates zu den Themen in Echtzeit erhalten, ist die beste Möglichkeit, die Topic-Subscriber-Map zu speichern.Wie kann Node Websockets Topic-Subscriber Map am besten verwaltet werden?

Live-Themen: Thema1, Thema2, Topic3, Topic4

User1 abonniert Thema1, Thema2, Topic4. User2 abonniert Topic2, Topic4.

So soll es ein Kartenobjekt sein, wie

folgt
Topic1=>[User1] 
Topic2=>[User1,User2] 
Topic4=>[User1,User2] 

So dass, wenn es ein Update auf Thema1 ist, wird der Antrag das Update auf Benutzer1 websocket passieren.

Die Frage: Ist es gut genug, um die Thema-Abonnenten Karte als eine Anwendungsvariable (Javascript-Objekt) zu halten? Oder ist es besser, REDIS dafür einzusetzen?

Ich möchte auch die Informationen in dieser Karte speichern, um Trends wie Themen Interesse im Zeitverlauf nach Geographie zu analysieren. Daher sollten diese Daten im Hintergrund in die Original-DB kopiert werden.

Ich glaube, ich sollte nicht die Datenbank abfragen, um die aktuellen Abonnenten jedes Mal zu finden, wenn es ein Update zu einem Thema gibt.

Wie bei dem, was ich gefunden habe, ist REDIS ein In-Memory-Datenspeicher. Und die Javascript-Anwendungsvariable wird auch auf dem RAM leben.

Was ist der beste Weg, um darüber zu gehen?

Leistung wie in der schnellsten Aktualisierung an den Teilnehmer gewünscht wird.

Antwort

1

Persönlich glaube ich, es ist besser, dies in Redis zu tun, aber nur, weil früher oder später Sie mehr als einen Knoten benötigen, wenn Ihre Anwendung skaliert. In dem Moment, in dem du das tust, bist du aus dem NodeJS-Land raus und versuchst einen Weg zu finden, diese Arbeit über einen Cluster zu koordinieren. Redis ist für diese Aufgabe sehr gut geeignet.

Das sagte, vielleicht sollten Sie sich das ActionHero Framework anschauen. Sein Chat-Modul macht genau das, was Sie tun möchten. Mit sehr wenig Code können WebSocket-Clients eine Verbindung zu einem oder mehreren Knoten in einem Cluster herstellen (koordiniert von Redis) und keiner oder mehreren Chat-Räumen beitreten und dann die an diese Räume gesendeten Nachrichten empfangen. Es könnte dir etwas Zeit sparen.