Quelqu'un peut-il me dire comment SignalR fonctionne en interne de manière très évoluée?
J'imagine que cela efface les données en utilisant Response.Flush
et côté client, il envoie des requêtes Ajax à certains intervalles. Est-ce correct?
Non, SignalR est une abstraction sur une connexion. Il vous donne deux modèles de programmation sur cette connexion (concentrateurs et connexions persistantes). SignalR a un concept de transport, chaque transport décide comment les données sont envoyées/reçues et comment il se connecte et se déconnecte.
SignalR a quelques transports intégrés:
SignalR tente de choisir la "meilleure" connexion prise en charge par le serveur et le client (vous pouvez également le forcer à utiliser un transport spécifique).
C'est le haut niveau. Si vous voulez voir comment chaque transport est implémenté, vous pouvez regarder le code source .
Il existe également un code client pour chaque transport: https://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Client.JS
Si vous vous demandez comment fonctionne le mode de scrutin long, notamment:
Il envoie une requête ajax au serveur qui attend de manière asynchrone la réponse du signal. Lorsqu'il y a un signal ou que la demande expire, le serveur renvoie le message et envoie une autre demande. Le processus se poursuit. (J'ai laissé quelques détails sur la façon dont le client garde une trace de ce qu'il a vu pour qu'il ne manque pas de messages)
J'espère que cela répond à la plupart de votre question.
@davidfowl a déjà répondu à la majeure partie. Cependant, pour fournir quelques détails supplémentaires concernant la différence de comportement des transports, notamment entre WebSocket et d’autres transports; ci-dessous sont quelques points.