Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Ich erhalte doppelte Nachrichten in meiner geclusterten node.js/socket.io/redis pub/sub-Anwendung

Ich habe mit Cluster und socket.io gekämpft. Jedes Mal, wenn ich die Cluster-Funktion verwende (ich verwende jedoch den integrierten Nodejs-Cluster), erhalte ich viele Leistungsprobleme und Probleme mit socket.io.

Während ich versuchte, dies zu recherchieren, habe ich in den Fehlerberichten und ähnlichem auf dem Socket.io-Git herumgegraben, und jeder, der Cluster oder externe Load Balancer für seine Server verwendet, scheint Probleme mit Socket.io zu haben.

Es scheint das Problem „Client not handsshake client should reconnect“ zu erzeugen, das Sie sehen werden, wenn Sie die ausführliche Protokollierung erhöhen. Dies erscheint häufig, wenn socket.io in einem Cluster ausgeführt wird, daher denke ich, dass es darauf zurückfällt. D.h. der Client wird jedes Mal mit einer randomisierten Instanz im socket.io-Cluster verbunden, wenn er eine neue Verbindung herstellt (er stellt mehrere http/socket/flash-Verbindungen her, wenn er autorisiert wird, und später immer mehr, wenn er neue Daten abfragt).

Im Moment bin ich wieder dazu übergegangen, nur jeweils einen Socket.io-Prozess zu verwenden. Dies könnte ein Fehler sein, aber auch ein Mangel daran, wie socket.io aufgebaut ist.

Hinzugefügt:Mein Weg, dies in Zukunft zu lösen, wird darin bestehen, jeder socket.io-Instanz innerhalb des Clusters einen eindeutigen Port zuzuweisen und dann die Portauswahl auf der Clientseite zwischenzuspeichern.