¿Cómo funciona SignalR internamente?

¿Alguien me puede decir 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 Ajax en ciertos intervalos. ¿Es correcto?

No, SignalR es una abstracción sobre una conexión. Le da dos modelos de progtwigción sobre esa conexión (concentradores y conexiones persistentes). SignalR tiene un concepto de transportes, cada transporte decide cómo se envían / ​​reciben los datos y cómo se conecta y desconecta.

SignalR tiene algunos transportes incorporados:

  1. WebSockets
  2. Eventos enviados por el servidor
  3. Marco para siempre
  4. Sondeo largo

SignalR intenta elegir la “mejor” conexión admitida por el servidor y el cliente (también puede obligarlo a usar un transporte específico).

Ese es el alto nivel. Si desea ver cómo se implementa cada transporte, puede ver 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 pregunta cómo funciona el transporte de larga duración en particular:

Envía una solicitud ajax al servidor que espera de forma asíncrona una señal para responder. Cuando hay una señal o la solicitud expira, regresa 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 se pierda los mensajes)

Espero que eso responda la mayor parte de tu 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.

  • WebSocket es el único transporte que establece una verdadera conexión bidireccional persistente entre el cliente y el servidor. Sin embargo, WebSocket solo es compatible con IIS 8 o superior y las últimas versiones de Internet Explorer, Google Chrome y Mozilla Firefox.
  • Mientras Server Server Events, Forever Frame y Long Polling, los tres siguen una comunicación unidireccional y son compatibles con la mayoría de los navegadores.
    Intereting Posts