O que ASP.NET Core SignalR?
Todos os aplicativos conectados à Internet são compostos por servidores e clientes. Os clientes dependem de servidores para dados e o principal mecanismo para receber dados é fazer solicitações HTTP (protocolo de transferência de hipertexto). Alguns aplicativos cliente exigem dados que são alterados com frequência.
O SignalR do ASP.NET Core fornece uma API para criar RPC (chamadas de procedimento remoto) de servidor para cliente. As RPCs invocam funções em clientes do código .NET Core do lado do servidor. Há várias plataformas com suporte, cada uma com o próprio SDK de cliente. Portanto, a linguagem de programação que está sendo invocada pela chamada RPC pode variar.
É útil se familiarizar com a terminologia comum associada ao SignalR. Nesta unidade, você aprenderá quais componentes do SignalR são necessários em um aplicativo para servidores, em vez dos aplicativos cliente. Além disso, você vai obter uma compreensão dos vários mecanismos de comunicação duplex. O SignalR encapsula vários protocolos em tempo real e abstrai as complexidades de cada implementação. Confira mais informações na documentação para SignalR no ASP.NET Core.
Os principais termos usados no SignalR são discutidos nas seções a seguir.
Transportes
O SignalR dá suporte às seguintes técnicas ou transportes para lidar com a comunicação em tempo real:
- WebSockets
- Eventos de enviados pelo servidor
- Sondagem longa
A ordem na qual os transportes são listados aqui indica a ordem de fallback normal. Em outras palavras, o WebSocket é preferível a Server-Sent Events e Server-Sent Events é preferível a sondagem longa, embora qualquer um desses transportes possa ser usado. O SignalR escolhe automaticamente o melhor método de transporte que está dentro dos recursos do servidor e do cliente. Confira mais informações na especificação oficial para Protocolos de transporte do SignalR.
Servidor
O servidor é responsável por expor um ponto de extremidade do SignalR. O ponto de extremidade mapeia para uma subclasse Hub ou Hub<T>. O servidor pode existir no local, em um provedor de nuvem (como o Azure) ou com o Serviço do Azure SignalR. O servidor expõe ambos os métodos de hub, que podem ser chamados dos clientes e eventos que os clientes podem assinar. Esses são considerados procedimentos remotos.
Hub
No SignalR, um hub é usado para se comunicar entre clientes e servidores. Um hub é um pipeline de alto nível que permite que um cliente e um servidor chamem métodos uns nos outros. Para esse fim, o SignalR lida com a expedição entre os limites do computador automaticamente. Você pode pensar em um hub como um proxy entre todos os clientes conectados e o servidor.
Protocolos
O SignalR é um protocolo para uma RPC bidirecional em qualquer transporte baseado em mensagens. Qualquer parte na conexão pode invocar procedimentos de outra parte e os procedimentos podem retornar zero ou mais resultados ou um erro. O SignalR fornece dois protocolos de hub integrados:
- Um protocolo de texto baseado em JSON, que é o padrão.
- Um protocolo binário baseado em MessagePack, que geralmente cria mensagens menores em comparação ao JSON.
Para usar o protocolo MessagePack, o servidor e o cliente precisam optar por configurá-lo, e tanto o servidor quanto o cliente têm que dar suporte a ele. Há um terceiro protocolo de hub chamado BlazorPack, mas ele é usado exclusivamente com aplicativos Blazor-Server. Ele não pode ser usado sem o modelo de hospedagem Blazor-Server. Confira mais informações na especificação oficial para Protocolo de Hub do SignalR.
Usuários
Um usuário no sistema atua como um indivíduo, mas também pode fazer parte de um grupo. As mensagens podem ser enviadas para os grupos e todos os membros do grupo são notificados. Um único usuário pode se conectar de vários aplicativos cliente. Por exemplo, o mesmo usuário pode usar um dispositivo móvel e um navegador da Web e obter atualizações em tempo real em ambos ao mesmo tempo.
Grupos
Um grupo consiste em uma ou mais conexões. O servidor pode criar grupos, adicionar conexões a um grupo e remover conexões de um grupo. Um grupo tem um nome específico, que atua como seu identificador exclusivo. Os grupos servem como um mecanismo de controle para ajudar a direcionar mensagens. Ou seja, a funcionalidade em tempo real só pode ser enviada aos usuários dentro de um grupo nomeado.
Conexões
Uma conexão com um hub é representada por um identificador exclusivo conhecido apenas pelo servidor e cliente. Existe uma só conexão por tipo de hub. Cada cliente tem uma conexão exclusiva com o servidor. Ou seja, um único usuário pode ser representado em vários clientes, mas cada conexão de cliente tem seu próprio identificador.
Clientes
O cliente é responsável por estabelecer uma conexão com o ponto de extremidade do servidor por meio de um objeto HubConnection
. A conexão de hub é representada em cada plataforma de destino:
- Cliente .NET:
Microsoft.AspNetCore.SignalR.Client.HubConnection
- Cliente JavaScript:
@microsoft/signalr.HubConnection
- Cliente Java:
com.microsoft.signalr.HubConnection
Confira mais informações em Plataformas com suporte a SignalR no ASP.NET Core.
Quando uma instância de conexão de hub iniciada com êxito, as mensagens fluem livremente em ambas as direções. Os usuários são livres para comunicar notificações ao servidor, bem como receber notificações do servidor. Um cliente é qualquer aplicativo conectado, por exemplo, um navegador da Web, um aplicativo móvel ou um aplicativo da área de trabalho, entre outros.