Qualcuno può farmi sapere come SignalR funziona internamente in modo ad alto livello?
Immagino stia scaricando i dati usando Response.Flush
e sul lato client sta inviando richieste Ajax a determinati intervalli. È corretto?
Qualcuno può farmi sapere come SignalR funziona internamente in modo ad alto livello?
Immagino stia scaricando i dati usando Response.Flush
e sul lato client sta inviando richieste Ajax a determinati intervalli. È corretto?
Risposte:
No, SignalR è un'astrazione su una connessione. Offre due modelli di programmazione su quella connessione (hub e connessioni permanenti). SignalR ha un concetto di trasporto, ogni trasporto decide come i dati vengono inviati / ricevuti e come si connette e si disconnette.
SignalR ha alcuni trasporti integrati:
SignalR tenta di scegliere la connessione "migliore" supportata da server e client (è anche possibile forzarla a utilizzare un trasporto specifico).
Questo è di alto livello. Se vuoi vedere come viene implementato ogni trasporto, puoi guardare il codice sorgente .
C'è anche un codice client per ogni trasporto: https://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Client.JS
Se ti stai chiedendo come funziona il trasporto polling lungo in particolare:
Invia una richiesta Ajax al server che attende in modo asincrono la risposta di un segnale. Quando c'è un segnale o la richiesta scade, ritorna dal server e invia un'altra richiesta e il processo continua. (Ho lasciato alcuni dettagli su come il client tiene traccia di ciò che ha visto in modo da non perdere i messaggi)
Spero che risponda alla maggior parte della tua domanda.
@davidfowl ha già risposto alla maggior parte. Tuttavia, per fornire ulteriori dettagli sulla differenza nel comportamento dei trasporti, in particolare tra WebSocket e altri trasporti; di seguito sono riportati alcuni punti.