O SignalR é uma biblioteca open source da Microsoft criada em 2011 por David Fowler e Damian Edwards, com o intuito de facilitar a implementação de aplicações desenvolvidas em ASP.NET (plataforma da Microsoft para o desenvolvimento de aplicações Web), que demandam funcionalidades em tempo real.
Alguns exemplos de comunicação em tempo real são aplicativos que exigem atualizações frequentes do servidor como:
- Chats
- Jogos
- Aplicativos de GPS
- Painéis de monitoramento
- Aplicações colaborativas
- Softwares de reunião
Comunicação em tempo real
O modelo de comunicação mais popular em aplicações web atualmente é baseado no conceito de request/response sobre o protocolo HTTP (Hyper Text Transfer Protocol).
Nesse modelo, o fluxo de comunicação é sempre iniciado pelo cliente, que quando precisa de uma informação, realiza uma solicitação ao servidor e aguarda receber a resposta. Em seguida essa comunicação é encerrada.
Entretanto, existem casos em que se deseja que o servidor envie de forma ativa informações ao cliente ou, por exemplo, um conjunto de clientes que precisa ser notificado quando uma determinada ação ocorrer. Esse tipo de cenário necessita que entrem em cena mecanismos para comunicação em tempo real.
Apesar de o SignalR não ser uma tecnologia nova de comunicação em tempo real, o que ele faz é abstrair as tecnologias existentes. É como se ele as utilizasse “por debaixo dos panos”, fazendo com que o desenvolvedor não precise se preocupar com detalhes da camada de comunicação, mas sim com a entrega de valor por meio das regras de negócio do software.
Abaixo, você confere as três tecnologias de comunicação ou também de transporte, que são suportadas:
Long Polling
Com o long polling, o cliente abre uma conexão HTTP com o servidor, que permanece aberta até que a resposta seja enviada. Sempre que houver novos dados, o servidor enviará a resposta nessa conexão.
Essa é uma evolução de uma técnica chamada polling, na qual o cliente, periodicamente, envia requisições HTTP ao servidor para simular uma comunicação em tempo real.
No long polling, como o próprio nome já diz, a requisição HTTP acaba sendo mais longa, já que leva um determinado tempo para o servidor enviar as respostas. Dessa maneira, menos requisições são necessárias.
Server-Sent Events
Nessa técnica existe um canal unidirecional de comunicação, no qual apenas o servidor envia mensagens ao cliente, que por sua vez é o responsável por tratar os eventos recebidos.
O Server–Sent Events funciona sobre uma conexão HTTP persistente, na qual o servidor sempre dispara os eventos na conexão criada.
WebSockets
WebSockets é uma tecnologia que permite a comunicação bidirecional, criando uma conexão persistente entre o cliente e o servidor para que ambas as partes possam enviar dados a qualquer momento. Esse é, de fato, um meio de comunicação em tempo real.
Ele também funciona como um protocolo de rede da camada de aplicação. Uma conexão webSocket é iniciada por um request/response HTTP, que em seguida é atualizado para usar um webSocket, como você pode conferir na imagem abaixo:
>>Leitura recomendada: Node.js – O que é, como funciona e quais as vantagens
Como o SignalR funciona?
O SignalR realiza um procedimento chamado fallback, para definir qual tecnologia de comunicação é a melhor a ser utilizada.
Nesse procedimento se verifica qual das tecnologias de transporte é suportada, tanto pelo cliente quanto pelo servidor, na seguinte ordem: webSocket, server–sent events e long polling.
Atualmente o webSocket é aceito em larga escala por navegadores e servidores web, então podemos dizer que praticamente toda comunicação SignalR usará webSocket.
Depois de feita a escolha de qual transporte será utilizado, é criada uma conexão persistente de alto nível entre cliente e servidor, por meio de uma entidade do lado do servidor chamada Hub, que torna a comunicação possível.
Hub
O Hub é uma classe servidora que fornece endpoints, que tornam o envio e o recebimento de mensagens em tempo real possível, para que tanto cliente quanto servidor consigam trocar mensagens entre si.
O SignalR fornece dois protocolos de Hub:
- Protocolo de texto baseado em JSON;
- Protocolo binário com base em MessagePack.
O MessagePack geralmente cria mensagens menores em comparação com o JSON, como você pode observar na imagem abaixo:
Os hubs chamam o código do lado do cliente enviando mensagens que contêm o nome e os parâmetros do método escolhido. Assim, o protocolo de hub selecionado se encarrega de serializar e desserializar as mensagens.
>>Leitura recomendada: Event modeling: Como essa abordagem de desenvolvimento funciona
Primeiros passos com SignalR
Para exemplificar o uso do SignalR, utilizamos a versão 3.1 do .net core para o servidor e javascript no cliente. Confira abaixo:
1 – Configure a classe servidora para usar signalR
Startup.cs
2 – Adicionar um Hub no servidor
3 – Instalar biblioteca no cliente:
npm install @microsoft/signalr
4 – Crie uma conexão a partir do cliente:
5 – Enviar e receber mensagens:
>>Leitura recomendada: Flutter: Saiba tudo sobre esse novo framework
Conclusão: uso do SignalR
O SignalR veio para facilitar a implementação da comunicação em tempo real para aplicações desenvolvidas com ASP.NET, já que ele é gratuito e multiplataforma. O código do lado do cliente pode ser escrito em Javascript, C# ou Java.
Ele também possui alguns métodos prontos para facilitar o uso, como por exemplo, poder enviar mensagens apenas para um cliente específico ou para um grupo de clientes.
Existe também um serviço na nuvem da Microssoft, o Azure SignalR Service, que permite lidar com conexões em larga escala de modo mais fácil e transparente.