Entendendo WebSockets e como utilizá-los em JavaScript

Descubra o conceito de WebSockets e como usá-los para criar conexões em tempo real entre o cliente e o servidor em JavaScript.

O que são WebSockets e como utilizá-los?

WebSockets são uma tecnologia de comunicação que permite uma conexão bidirecional e em tempo real entre o cliente (geralmente o navegador) e o servidor. Diferente das requisições HTTP tradicionais, que são unidimensionais e baseadas em requisições e respostas, os WebSockets permitem que o servidor envie dados ao cliente sem que o cliente precise fazer uma nova requisição. Isso torna os WebSockets ideais para aplicações em tempo real, como chats, jogos online e sistemas de notificação.

Como funciona o WebSocket?

A comunicação via WebSocket começa com o cliente (como um navegador) estabelecendo uma conexão com o servidor usando o protocolo WebSocket. Essa conexão permanece aberta, permitindo a troca de mensagens de maneira contínua e eficiente. O WebSocket usa o protocolo ws:// ou wss:// (para comunicação segura) para estabelecer a conexão.

Exemplo de como criar uma conexão WebSocket em JavaScript:

let socket = new WebSocket('ws://exemplo.com/socket');

socket.onopen = function(event) {
  console.log('Conexão estabelecida:', event);
  socket.send('Olá, servidor!');
};

socket.onmessage = function(event) {
  console.log('Mensagem recebida:', event.data);
};

socket.onerror = function(error) {
  console.log('Erro:', error);
};

socket.onclose = function() {
  console.log('Conexão fechada');
};

Neste exemplo, a conexão WebSocket é aberta para o servidor em ws://exemplo.com/socket. O cliente envia uma mensagem ao servidor logo após a conexão ser estabelecida, e também define funções para lidar com mensagens recebidas, erros e fechamento da conexão.

WebSocket no lado do servidor

Os WebSockets também exigem suporte no lado do servidor. Para criar um servidor WebSocket, você pode usar bibliotecas específicas, como ws para Node.js, que permitem gerenciar conexões WebSocket e enviar mensagens aos clientes. Por exemplo:

const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(message) {
    console.log('recebido: %s', message);
  });

  ws.send('Olá, cliente!');
});

Aqui, o servidor WebSocket está escutando na porta 8080. Quando uma conexão é estabelecida, ele envia uma mensagem para o cliente e também escuta mensagens enviadas pelo cliente.

Aplicações de WebSockets

WebSockets são ideais para qualquer aplicação que exija comunicação em tempo real entre o cliente e o servidor. Alguns exemplos de uso incluem:

  • Chats e mensagens instantâneas: Os WebSockets permitem que os usuários troquem mensagens em tempo real, sem a necessidade de atualizações periódicas.
  • Notificações em tempo real: Como notificações de novos emails, atualizações de redes sociais, ou alertas de sistema.
  • Jogos online: Para jogos que exigem atualizações em tempo real, como jogos multiplayer online.
  • Aplicações financeiras: Como sistemas de acompanhamento de mercado de ações, onde os dados precisam ser atualizados em tempo real.

Conexões seguras com WebSocket (wss://)

Para garantir a segurança das informações trocadas entre o cliente e o servidor, você deve usar o WebSocket seguro, que usa o protocolo wss://. O processo é semelhante ao ws://, mas com criptografia usando TLS/SSL.

Exemplo de WebSocket seguro:

let socket = new WebSocket('wss://exemplo.com/socket');

Lidando com desconexões

É importante tratar desconexões em WebSockets para garantir que a comunicação seja restaurada ou que o erro seja tratado adequadamente. O WebSocket dispara um evento onclose quando a conexão é fechada, e é possível implementar tentativas de reconexão, caso necessário.

Exemplo de reconexão de WebSocket:

let socket = new WebSocket('ws://exemplo.com/socket');

socket.onclose = function() {
  console.log('Tentando reconectar...');
  setTimeout(function() {
    socket = new WebSocket('ws://exemplo.com/socket');
  }, 1000);  // tenta reconectar após 1 segundo
};

Neste exemplo, quando a conexão WebSocket for fechada, o código tenta reconectar automaticamente após 1 segundo.

Conclusão

WebSockets são uma excelente solução para comunicação bidirecional em tempo real entre cliente e servidor. Eles permitem que dados sejam enviados sem a necessidade de requisições repetidas e são ideais para aplicativos que requerem atualizações rápidas e frequentes, como chats, jogos online, sistemas de monitoramento e muito mais. Com o uso do WebSocket, é possível melhorar a performance e a experiência do usuário em aplicações interativas e dinâmicas.

WebSockets têm transformado a forma como as aplicações interativas funcionam. Sua capacidade de manter uma conexão aberta e bidirecional com o servidor reduz significativamente a latência e permite atualizações em tempo real. Essa tecnologia é particularmente útil em aplicações que exigem comunicação constante e rápida, como jogos e sistemas de mensagens.

Algumas aplicações:

  • Comunicação em tempo real em chats e mensageiros.
  • Notificações em tempo real, como alertas de redes sociais ou sistemas financeiros.
  • Jogos online que exigem dados instantâneos.
  • Aplicações que necessitam de troca constante de informações, como monitoramento de dados em tempo real.

Dicas para quem está começando

  • Comece a usar WebSockets para experimentos simples, como enviar uma mensagem do servidor para o cliente.
  • Aprenda a trabalhar com WebSocket em um servidor local antes de migrar para um servidor de produção.
  • Utilize WebSockets seguros (wss://) sempre que possível para garantir a segurança da comunicação.
  • Implemente funcionalidades de reconexão para lidar com falhas de rede ou desconexões inesperadas.
Foto de Ricardo Vasconcellos
Contribuições de
Ricardo Vasconcellos

Desenvolvedor full stack especialista em PHP, JavaScript, Node.js, Python e SQL.

Mais sobre o autor
Compartilhe este tutorial: O que são WebSockets e como utilizá-los?

Compartilhe este tutorial

Continue aprendendo:

Como lidar com erros no fetch?

Entenda como capturar e tratar erros ao usar o `fetch` API em JavaScript, lidando com falhas de rede e respostas com status de erro.

Tutorial anterior

O que é o Event Loop no JavaScript?

Descubra o conceito do Event Loop em JavaScript e como ele gerencia a execução assíncrona de código para melhorar o desempenho das suas aplicações.

Próximo tutorial