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

Comment fonctionne SignalR.Redis sous le capot ?

Non, il n'y a pas de livre blanc et c'est comme 200 lignes de code, donc pas grand-chose à avaler.

Dans SignalR, chaque message passe par une chose appelée un bus de messages. Lorsque vous souhaitez effectuer une mise à l'échelle sur plusieurs nœuds (ou processus ou domaines d'application), la mise en œuvre de ce bus doit pouvoir communiquer avec chaque instance de votre application. Pour ce faire, vous pouvez utiliser le RedisMessageBus. Redis dispose d'un mécanisme de sous-publication ainsi que de sa capacité à stocker des paires clé-valeur et nous n'utilisons que le premier pour SignalR.

Hors-sujet :C'est TRÈS important ! SignalR n'est PAS une messagerie fiable, c'est une abstraction de connexion. Nous pouvons mettre en mémoire tampon les messages pour les interrogations longues, mais vous ** ne pouvez pas * compter sur la présence des messages pour toujours. Si vous avez des messages importants que vous devez conserver, conservez-les.

Chaque serveur Web se connecte à un (ou plusieurs dans la nouvelle implémentation) événements redis pour envoyer des messages entre eux. Lorsqu'un message arrive pour un ou plusieurs clients, il est envoyé au fond de panier (redis) et il arrive sur tous les serveurs Web. Chaque serveur Web reçoit le message de redis et le stocke dans un cache local. Ce cache local est l'endroit où les clients SignalR (navigateurs, etc.) sont servis.

Les curseurs sont une partie importante de la conception de la mise à l'échelle. Un curseur représente l'endroit où se trouve un client particulier dans un flux infini de messages. Lorsque les clients se reconnectent après avoir abandonné une connexion ou qu'une connexion longue interrogation revient après avoir reçu un message, il demande au bus de tout obtenir depuis une valeur de curseur. Les curseurs sont définis par l'implémentation du bus de messages et nous avons normalisé cela dans les dernières sources (pas encore publiées au moment de la rédaction mais je n'entrerai pas dans les détails ici). Le curseur dans l'implémentation actuelle de redis est juste un nombre qui est incrémenté, rien de bien compliqué.

J'espère que cela donne une idée de la façon dont cela fonctionne.