Redis
 sql >> Base de données >  >> NoSQL >> Redis

Je reçois des messages en double dans mon application cluster node.js/socket.io/redis pub/sub

Je me bats avec cluster et socket.io. Chaque fois que j'utilise la fonction de cluster (j'utilise cependant le cluster Nodejs intégré), je rencontre beaucoup de problèmes de performances et de problèmes avec socket.io.

En essayant de faire des recherches à ce sujet, j'ai fouillé dans les rapports de bogues et similaires sur socket.io git et toute personne utilisant des clusters ou des équilibreurs de charge externes sur leurs serveurs semble avoir des problèmes avec socket.io.

Cela semble produire le problème "le client qui n'est pas en contact avec le client doit se reconnecter" que vous verrez si vous augmentez la journalisation détaillée. Cela apparaît beaucoup chaque fois que socket.io s'exécute dans un cluster, donc je pense que cela revient à cela. C'est-à-dire que le client se connecte à une instance aléatoire dans le cluster socket.io chaque fois qu'il établit une nouvelle connexion (il effectue plusieurs connexions http/socket/flash lors de l'autorisation et plus tout le temps plus tard lors de l'interrogation de nouvelles données).

Pour l'instant, je suis revenu à l'utilisation d'un seul processus socket.io à la fois, cela pourrait être un bogue mais pourrait aussi être une lacune de la façon dont socket.io est construit.

Ajout :Ma façon de résoudre ce problème à l'avenir consistera à attribuer un port unique à chaque instance socket.io à l'intérieur du cluster, puis à mettre en cache la sélection de port côté client.