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;

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