164 votes

Comment SignalR fonctionne en interne?

Est-ce que n'importe qui peut me faire savoir que SignalR fonctionne en interne de manière de haut niveau?

Je suppose qu'il vide les données à l'aide de Response.Flush et que côté client, il envoie des requêtes ajax à certains intervalles. Est-ce correct?

251voto

dfowler Points 16530

Non, SignalR est une abstraction sur une connexion. Il vous donne deux modèles de programmation sur la connexion (moyeux et les connexions persistantes). SignalR a une notion de transports, à chaque des transports décide de la façon dont les données envoyées/reçues et de la façon dont il se connecte et se déconnecte.

SignalR a un peu construit en transports en commun:

  1. Les WebSockets
  2. Serveur A Envoyé Des Événements
  3. Forever Cadre
  4. Le temps d'interrogation

SignalR essaie de choisir le "meilleur" de connexion pris en charge par le serveur et le client (vous pouvez également forcer à utiliser un transport spécifique).

C'est le haut niveau. Si vous voulez voir comment chaque transport est mis en place, vous pouvez regarder le code source.

Il y a aussi le code client pour chaque transport: https://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Client.JS

Si vous vous posez la question sur la façon dont le temps d'interrogation ouvrages de transport, en particulier:

Il envoie une requête ajax vers le serveur qui est en attente de façon asynchrone pour un signal de répondre. Quand il y a un signal ou à la demande de son temps, elle retourne à partir du serveur et envoie une demande et le processus continue. (J'ai laissé quelques détails sur la façon dont le client qu'il garde la trace de ce qu'il a vu donc ça ne manquez pas les messages)

J'espère que ça répond à la plupart de votre question.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X