SignalR: Comunicação em tempo real em aplicações web

O SignalR é uma biblioteca open  source da Microsoft criada em 2011 por David Fowler e  Damian Edwardscom 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 (HyperTextTransferProtocol) 

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 oSignalR 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: 

LongPolling 

Com o longpolling, 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 envia a resposta nessa conexão.  

Essa é uma evolução de uma técnica chamada pollingna qual o cliente, periodicamente, envia requisições HTTP ao servidor para simular uma comunicação em tempo real.  

No longpolling, 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 maneiramenos requisições são necessárias. 

 

Server-SentEvents 

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 ServerSentEvents 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çãoUma conexão webSocket é iniciada por um request/response HTTP, que em seguida é atualizado para usar umwebSocket, como você pode conferir na imagem abaixo:  

SignalR  Figura 1 – Estabelecimento de uma conexão websocket.
Figura 1 – Estabelecimento de uma conexão websocket.

>>Leitura recomendada: Node.js – O que é, como funciona e quais as vantagens 

Como o SignalRfunciona? 

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, serversentevents e longpolling. 

Atualmente o webSocket é aceito em larga escala por navegadores e servidores web, então podemos dizer que praticamente toda comunicação SignalRusará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 recebimento de mensagens em tempo real possível, para que tanto cliente quanto servidor consigam trocar mensagens entre si. 

SignalRfornece dois protocolos de Hub 

  1. Protocolo de texto baseado em JSON; 
  2. 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: 

SignalR  Figura 2 - Comparação entre Json e MessagePack
Figura 2 – Comparação entre Json e MessagePack

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. 

 

SignalR  Figura 3 – Representação de um Hub
Figura 3 – Representação de um Hub

>>Leitura recomendada: Event modeling: Como essa abordagem de desenvolvimento funciona 

Primeiros passos com SignalR

Para exemplificar o uso do SignalRutilizamos a versão 3.1 do .net core para o servidor e javascript no cliente. Confira abaixo:  

 Configure a classe servidora para usar signalR 

Startup.cs SignalR  - Passo 1

2 – Adicionar um Hub no servidorSignalR  - Passo 2

3 – Instalar biblioteca no cliente:

npm install @microsoft/signalr

4 – Crie uma conexão a partir do cliente:Passo 4

5 – Enviar e receber mensagens:

 Passo 5

>>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, Azure SignalR Service, que permite lidar com conexões em larga escala de modo mais  fácil e transparente. 

 

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Newsletter

Insights de tecnologia para você!

Não compartilharemos seu e-mail com terceiros e também prometemos não enviar spams. Ao informar seu e-mail, você concorda com nossa Política de Privacidade.

Conteúdos relacionados

Veja nesse artigo sobre inteligência artificial para negócios como adorar a IA de forma eficácia com o seu time.
Confira nesse artigo como é possível alcançar a Hiperprodutividade no desenvolvimento de software com o uso da IA.
Veja nesse artigo de Edison Kalaf, sócio diretor da Opus Software, como a TI não é apenas operacional, mas um agente ...