¿Alguien puede decirme cómo funciona SignalR internamente de una manera de alto nivel?
Supongo que está vaciando los datos usando Response.Flush
y en el lado del cliente está enviando solicitudes de Ajax a ciertos intervalos. ¿Es correcto?
¿Alguien puede decirme cómo funciona SignalR internamente de una manera de alto nivel?
Supongo que está vaciando los datos usando Response.Flush
y en el lado del cliente está enviando solicitudes de Ajax a ciertos intervalos. ¿Es correcto?
Respuestas:
No, SignalR es una abstracción sobre una conexión. Le ofrece dos modelos de programación a través de esa conexión (concentradores y conexiones persistentes). SignalR tiene un concepto de transporte, cada transporte decide cómo se envían / reciben los datos y cómo se conecta y desconecta.
SignalR tiene algunos transportes integrados:
SignalR intenta elegir la "mejor" conexión compatible con el servidor y el cliente (también puede forzarla a utilizar un transporte específico).
Ese es el alto nivel. Si desea ver cómo se implementa cada transporte, puede consultar el código fuente .
También hay un código de cliente para cada transporte: https://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Client.JS
Si está preguntando cómo funciona el transporte de sondeo largo en particular:
Envía una solicitud ajax al servidor que está esperando asincrónicamente una señal para responder. Cuando hay una señal o el tiempo de espera de la solicitud, vuelve del servidor y envía otra solicitud y el proceso continúa. (Dejé algunos detalles sobre cómo el cliente realiza un seguimiento de lo que vio para que no pierda mensajes)
Esperemos que eso responda la mayor parte de su pregunta.
@davidfowl ya ha respondido la mayor parte. Sin embargo, para proporcionar más detalles sobre la diferencia en el comportamiento de los transportes, específicamente entre WebSocket y otros transportes; a continuación hay algunos puntos.