Node.js Douilles.io, Redis pub/sub haut volume, à faible latence difficultés

Lorsque l'on associe socket.io/node.js et redis pub/sub dans une tentative de créer un web en temps réel du système de diffusion entraînée par les événements de serveur qui peut gérer de multiples transports, il semble y avoir trois approches:

  1. 'createClient' un redis connexion et de vous abonner à canal(s). Sur la socket.io de connexion du client, de joindre le client dans une prise.io chambre. Dans le redis.sur("message", ...) de l'événement, appelez io.les sockets.dans(chambre).émettre("événement", données) pour les distribuer à tous les clients dans la salle. Comme Comment réutiliser le redis connexion de socket.io?

  2. 'createClient' un redis connexion. Sur la socket.io de connexion du client, de joindre le client dans une prise.io de chambre et de vous abonner pertinentes redis channel(s). Inclure redis.sur("message", ...) à l'intérieur de la connexion du client de fermeture et sur la réception du message d'appel du client.émettre("événement", données) pour déclencher l'événement sur le client. Comme la réponse dans Des exemples en utilisant RedisStore dans le support.io

  3. Utiliser le RedisStore cuit dans la douille.io et de "diffusion" de l'unique "envoi" de canal dans le Redis à la suite de la socketio-spec protocole.

Numéro 1 permet de traiter le Redis sous et associés événement une fois pour tous les clients. Numéro 2 offre un branchement direct dans le Redis pub/sub. Le numéro 3 est plus simple, mais offre peu de contrôle sur les événements de messagerie.

Cependant, dans mes tests, tous présentent de façon inattendue faible performance avec plus de 1 client connecté. Le serveur d'événements en question sont de 1 000 messages publiés sur un redis canal le plus rapidement possible, pour être distribués aussi rapidement que possible. La Performance est mesurée par des timings sur les clients connectés (socket.io-client en fonction de journal horodateurs dans un Redis liste pour l'analyse).

Ce que j'ai supposer, c'est que dans l'option 1, le serveur reçoit le message, puis de manière séquentielle, écrit-il à tous les clients connectés. Dans l'option 2, le serveur reçoit chaque message plusieurs fois (une fois par abonnement client) et l'écrit pour le client concerné. Dans les deux cas, le serveur n'est pas à la deuxième événement de message jusqu'à ce qu'elle est communiquée à tous les clients connectés. Une situation clairement exacerbée par la hausse de la concurrence.

Cela semble en contradiction avec la perception de la sagesse des piles de capacités. Je veux bien le croire, mais j'ai du mal.

Est ce scénario (faible latence de la distribution à haut volume de messages) tout simplement pas une option avec ces outils (encore?), ou alors j'ai loupé un truc?

  • avez-vous essayé de pub-sub avec les serveurs de messagerie comme 0MQ/AMQ et reçu les mêmes performances?
  • la meilleure chance d'obtenir plus de réponses, je suis curieux de voir les opinions des experts carillon. Ma réponse ici, a été principalement basée sur les docs flottant autour de l'internet.
  • Salut lebear, j'ai exactement le même souci et j'ai trouvé ce lien après avoir regardé autour. Si vous avez trouvé la réponse à votre propre question, j'aimerais l'entendre ainsi.
InformationsquelleAutor lebear | 2012-05-11