DEV Community

Cover image for Entendendo Polling: Técnicas, Implementações e Alternativas para Comunicação em Tempo Real
Vitor Rios
Vitor Rios

Posted on

Entendendo Polling: Técnicas, Implementações e Alternativas para Comunicação em Tempo Real

Requisições feitas por pooling, ou polling (a palavra correta em inglês), referem-se a uma técnica de comunicação onde um cliente solicita regularmente ou em intervalos regulares informações de um servidor. O objetivo do polling é verificar se há novos dados ou atualizações disponíveis no servidor. Esta abordagem é frequentemente usada quando não há uma maneira fácil de implementar uma comunicação bidirecional em tempo real entre cliente e servidor.

Como Funciona o Polling

  1. Intervalos Regulares: O cliente faz uma requisição ao servidor em intervalos regulares de tempo (por exemplo, a cada 5 segundos).
  2. Resposta do Servidor: O servidor processa a requisição e retorna os dados atuais para o cliente.
  3. Repetição: O cliente continua a fazer essas requisições repetidamente em intervalos definidos.

Tipos de Polling

Existem dois tipos principais de polling:

  1. Short Polling: O cliente faz requisições frequentes ao servidor, normalmente em intervalos de tempo muito curtos. Isso pode sobrecarregar o servidor e a rede devido ao grande número de requisições.

Exemplo:

   setInterval(async () => {
     const response = await fetch('/api/status');
     const data = await response.json();
     console.log(data);
   }, 5000); // Requisição a cada 5 segundos
Enter fullscreen mode Exit fullscreen mode
  1. Long Polling: O cliente faz uma requisição ao servidor e, se não houver novos dados, o servidor mantém a conexão aberta por um determinado período de tempo, esperando por novas informações. Quando há novos dados, o servidor envia uma resposta e o cliente faz imediatamente outra requisição. Isso reduz a carga no servidor e na rede comparado ao short polling.

Exemplo:

   const longPolling = async () => {
     try {
       const response = await fetch('/api/status');
       const data = await response.json();
       console.log(data);
       longPolling(); // Chama a função novamente após receber a resposta
     } catch (error) {
       console.error('Polling error:', error);
       setTimeout(longPolling, 5000); // Tenta novamente após 5 segundos em caso de erro
     }
   };

   longPolling();
Enter fullscreen mode Exit fullscreen mode

Vantagens e Desvantagens

Vantagens:

  • Simples de Implementar: Polling é fácil de entender e implementar.
  • Compatibilidade: Funciona com quase todos os tipos de servidores e clientes.

Desvantagens:

  • Ineficiente: Pode ser ineficiente, especialmente o short polling, devido ao grande número de requisições que podem sobrecarregar o servidor e a rede.
  • Latência: Pode introduzir latência, pois as atualizações não são em tempo real, especialmente se os intervalos de polling forem longos.
  • Consumo de Recursos: Manter conexões abertas por longos períodos (no caso de long polling) pode consumir recursos significativos no servidor.

Alternativas ao Polling

Existem alternativas mais eficientes ao polling para comunicação em tempo real entre cliente e servidor:

  1. WebSockets: Permitem comunicação bidirecional em tempo real entre cliente e servidor, mantendo uma única conexão aberta.

Exemplo:

   const socket = new WebSocket('ws://example.com/socket');

   socket.onmessage = (event) => {
     console.log('Message from server:', event.data);
   };

   socket.send('Hello Server!');
Enter fullscreen mode Exit fullscreen mode
  1. Server-Sent Events (SSE): Permitem que o servidor envie atualizações para o cliente através de uma conexão HTTP única e persistente.

Exemplo:

   const eventSource = new EventSource('/api/events');

   eventSource.onmessage = (event) => {
     console.log('New event:', event.data);
   };
Enter fullscreen mode Exit fullscreen mode
  1. GraphQL Subscriptions: Permitem receber atualizações em tempo real quando os dados em um servidor GraphQL são alterados.

Conclusão

Polling é uma técnica útil e simples para verificar atualizações no servidor, mas pode ser ineficiente e consumir muitos recursos. Alternativas como WebSockets, SSE, e GraphQL Subscriptions são mais eficientes para comunicação em tempo real e são recomendadas quando há necessidade de atualizações frequentes ou imediatas entre cliente e servidor.

Top comments (0)