SignalR – Microsoft Library

Con questo articolo inizio ufficialmente una serie di articoli legati al mondo di Blazor. Ma cosa c’entra Blazor con SignalR? Quando blazor effettua il render di una pagina html server-side, utilizza uno script chiamato blazor.server.js che deve essere ovviamente presente all’interno della pagina da visualizzare.

Lo script blazor.server.js viene downloadato sul browser e viene eseguito localmente. Il codice all’interno di questo script effettua la connessione verso le API di un Signalr Hub, aprendo di fatto una connessione tra il server ed il client che ha generato la richiesta.

SignalR consente di impostare una connessione tra server e client in maniera trasparente per lo sviluppatore. La caratteristica di questa libreria è di impostare in maniera automatica al tipo di canale disponibile. In pratica, consente di evitare l’utilizzo di codice javascript che esegue il polling automatico per verificare la presenza di dati aggiornati sul server.

Dal punto di vista dello sviluppatore è sufficiente definire una classe che estende la classe Hub dalla quale sarà possibile inviare la callback alla pagina Javascript . A questo punto, tutto è demandato alla libreria di SignalR.

SignalR – Funzionamento

Quando la pagina viene caricata all’interno del browser, il client inizia la negoziazione del miglior protocollo di comunicazione con il server. Gli steps che vengono eseguiti sono:

  • se è possibile utilizzare WebSocket, viene utilizzato come protocollo ottimale. Con WebSocket viene definita la comunicazione full-duplex, utilizzando TCP/IP. Per poter funzionare necessita che sia il client che il server lo supportino.
  • se non possibile utilizzare WebSocket, la libreria scala verso un’altra tecnologia. In particolare, Server Sent Events, che è un meccanismo di comunicazione che consente di inviare le notifiche tra server e client. A differenza di WebSocket, la comunicazione in questo caso è unidirezionale. Una volta effettuata la connessione il server può inviare i dati al client, che può riceverli tramite una callback dell’oggetto EventSource
  • se non è possibile utilizzare anche Server Sent Events, SignalR effettua un downgrade utilizzando il long-polling. In questo caso il client effettua check periodici dei dati del server . In realtà l’algoritmo che viene utilizzato è una versione ottimizzata del long-polling, in modo di ottimizzare lo scambio dei dati .

Blazor Server, utilizza SignalR per poter inviare notifiche push ai client.

Maggiori informazioni su SignalR possono essere visualizzate qui.