2017-06-25 2 views
0

Erstellen eines Kundenservice Chat-Anwendung. Daher müssen die Kunden, die in Sockets angemeldet sind, im Auge behalten und an den Admin/Agentenraum angehängt werden.Speichern von Socket.io-Objekt in einem persistenten DB oder Redis

Ab sofort habe ich dies mit dem einfachen JSON Objekt erreicht. Aber um die App zu skalieren, muss ich einen Ort finden, an dem ich sie speichern kann. Da das Socket-Objekt die Form von Circular JSON hat, kann ich es nicht in Redis speichern. Ich habe versucht, Douglas Crockfords Cycle.js zu benutzen, aber es sieht so aus, als ob es die Natur des Objekts im Dezyklus/Retrozyklus verändert.

Bitte helfen Sie mir eine Lösung zu finden, um den Kunden & Agenten-Sockets zu verfolgen und verbinden sie als eine Anfrage kommt vom Front-End des Agenten.

Aktuelle Lösung:

// Admin Socket - 

admins[socket.username] = socket; 

// Customer socket 

users[socket.roomID] = socket; 

Notwendigkeit, diese Lösung auf Multi-Core-Linux-Maschine mit 16 Kernen für 16 Socket-Servern ausgeführt werden/node.js Cluster von Nginx Proxy. Also müssen Sie schnell eine Lösung für eine robuste Architektur finden.

Eine weitere Infos:

  1. I Redis bin mit für Sub/pub für horizontale Skalierung.
  2. Und Redis verwenden, um Nachrichten für kurze Geschichte zu speichern.

P.S. (MongoDB ist in meiner Organisation nicht mehr erlaubt. Mongo Based Lösung funktioniert nicht für mich.)

Antwort

0

Sockets sind nicht serialisierbar, Sie können sie nicht außerhalb Ihres Systems (Redis oder irgendeinen anderen externen Speicher) exportieren. Dies ist darauf zurückzuführen, dass ein Socket eine Live-Netzwerkverbindung zwischen Ihrem Server und einem Client darstellt, keine Bedeutung außerhalb des Servers hat, da keine Verbindung zur Darstellung besteht.

Was Sie wahrscheinlich brauchen aktiven Benutzersitzungen mit allen notwendigen Informationen zu speichern, um eine Verbindung zu erstellen und die Sitzung in den vorherigen Zustand wiederherzustellen: Dinge wie Benutzernamen, Raumname usw.