Question

J'ai une application NodeJS le chat où plusieurs clients se connectent à une salle de chat commun en utilisant socketio. Je veux à l'échelle des processus de ce à plusieurs nœuds, peut-être sur des machines différentes. Toutefois, les clients qui se connectent à la même pièce ne sera pas garantie pour atteindre le même processus de noeud. Par exemple l'utilisateur 1 traitera de noeud frappé A et l'utilisateur 2 traitera de nœud frappé B. Ils sont dans la même chambre, donc si l'utilisateur 1 envoie un message, l'utilisateur 2 devrait l'obtenir. Quelle est la meilleure façon d'y arriver puisque leurs connexions sont gérées par différents processus?

je pensais à avoir juste les processus de noeud se connecter à Redis. Ce au moins permet de résoudre le problème que le processus A sera savoir il y a un autre utilisateur, l'utilisateur 2, dans la chambre, mais il ne peut toujours pas Envoyer à l'utilisateur 2 parce que les contrôles processus B qui lien. Est-il possible d'enregistrer un rappel « valeur modifiée » pour Redis?

Je suis dans un environnement de serveur où je ne peux pas contrôler tout de l'équilibrage de routage ou de la charge.

Était-ce utile?

La solution

Both node.js processes can be subscribed to some channel through redis pub/sub and listen to messages which you pass to this channel. For example, when user 1 connects to process A on the first machine, you can store in redis information about this user along with the information which process on which machine manages it. Then when user 2, which is connected to process B on the second machine, sends a message to user 1, you can publish it to this channel and check which process on which machine is responsible for managing communication with user 1 and respond accordingly.

Autres conseils

I have done(did) some research on this. Below my findings:

Like yojimbo87 said you first just use redis pub/sub(is very optimized).

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

Tim Caswell wrote:

It's been my experience that the bottleneck is the serialization and de-serialization of the data, not the actual channel. I'm pretty sure you can use named pipes, but I'm not sure what the API is. msgpack seems like a good format for the data interchange. There are a few libraries out there that implement msgpack or ipc frameworks on top of it.

But when serialization / deserialization becomes your bottle-neck I would try to use https://github.com/pgriess/node-msgpack. I would also like to test this out, because I think the sooner you have this the better?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top