Entenda o que é Websocket e suas aplicações

O Websocket é uma tecnologia muito útil em diversas aplicações, sendo usada principalmente em: Aplicação de mensageria, notificações push dentre outras. Todas elas tem em comum o fato de precisar ter uma comunicação em tempo real com o servidor.

O WebSocket é um protocolo de comunicação em tempo real que permite a troca contínua de dados entre o cliente (geralmente um navegador) e o servidor sem a necessidade de reenvio constante de requisições HTTP tradicional. Desenvolvedores utilizam muito em aplicações de mensageria por ser uma tecnologia que trabalha no canal full-duplex no conjunto de protocolos TCP. O protocolo TCP/IP forma-se por quatro camadas, são elas: 

  • Rede/Link: Responsável pela conversão dos pacotes em sinais elétricos e pela comunicação de dados na mesma rede;
  • Internet: É responsável pela comunicação entre máquinas na rede através do protocolo IP;
  • Transporte: O camada de transporte controla a qualidade de conexão e fornece modos de dados entre duas partes conectadas à rede, utilizando-se principalmente dos protocolos TCP e UDP.;
  • Aplicação: O camada de aplicação define e realiza a comunicação com a camada de transporte. Os protocolos usados nessa camada é HTTP tendo como seu principal, Telnet, SMTP e DHCP;
Modelo TCP IP
Modelo TCP IP

Diferente do protocolo HTTP o WebSocket permite uma conexão persistente, onde tanto o cliente quanto o servidor podem enviar mensagens de maneira bidirecional e instantânea, uma vez que a conexão esteja estabelecida. A conexão WebSocket permanece aberta enquanto o cliente e o servidor estiverem ativos. Se houver inatividade ou perda de conexão, a conexão pode ser fechada automaticamente.

Exemplo de uso

// Criando uma nova conexão WebSocket
const socket = new WebSocket('ws://exemplo.com/socket');

// conexão é aberta
socket.onopen = function(event) {
  console.log('Conexão aberta com sucesso');
  socket.send('Servidor!'); // Envia uma mensagem para o servidor
};

// Evento de quando uma mensagem é recebida do servidor
socket.onmessage = function(event) {
  console.log('Mensagem recebida do servidor:', event.data);
};

// Evento de quando a conexão é fechada
socket.onclose = function(event) {
  console.log('Conexão fechada', event);
};

// Evento de erro
socket.onerror = function(error) {
  console.error('Erro no WebSocket', error);
};

Apesar de ter diversos benefícios em utilizar o Websocket como eficiência, a sua baixa latência, emitir atualizações sem que ele faça uma requisição e dentre outras tantas é importante ressaltar que não é em toda aplicação que o Websocket será o ideal. Aplicações que não precisam de comunicação de dados em tempo real utilizar os métodos de requisições tradicionais(AJAX ou APIs RESTful) podem ser o ideal pelo fato de ser mais simples e em alguns casos mais eficientes. De acordo com que as conexões vão sendo abertas dentro vai se tornando mais complexo o gerenciamento de várias conexões simultâneas em servidores de grande escalabilidade, alternativas como cluster pode ser uma boa opção.

O Websocket necessita de uma rede estável e funcional já que a comunicação é em tempo real. Então é necessário ter em seu código tratamentos para reconexão automática caso perca a conexão com o servidor.

Um ponto a ser levado em consideração é a segurança ao implementar o Websocket. É importante garantir o uso de WebSocket seguro (WSS), que é a versão sobre TLS (HTTPS) para evitar interceptações e ataques

Então se sua aplicação não precisa de comunicação em tempo real ou tem um baixo volume de dados e a rede é intermitente o uso do Websocket não é o ideal.

Referência: Redes Brasil, Mozilla Developer
Leia: Como criar uma API REST utilizando ExpressJS – FrontMaster