Pular para o conteúdo
0%

O que é um WebSocket e como ele funciona

Alchemy team headshot

Escrito por Alchemy

Publicado em 20 de junho de 20225 min de leitura

WebSocket é um protocolo de comunicação bidirecional baseado em TCP que padroniza a comunicação entre um cliente e um servidor, permitindo que ambas as partes solicitem dados uma da outra. Em contraste, um protocolo unidirecional como HTTP só permite que o cliente solicite dados do servidor.

Uma conexão WebSocket entre um cliente e um servidor pode permanecer aberta enquanto as partes desejarem manter a conexão, permitindo comunicação contínua.

Com HTTP, cada conexão começa quando o cliente faz uma solicitação e termina quando a solicitação é atendida.

WebSockets podem ser superiores para notificações de dApps Web3 porque possibilitam notificações em tempo real para eventos críticos de forma contínua, em comparação com a exigência de solicitações individuais. Ferramentas como Alchemy Notify tornam simples adicionar notificações em tempo real a wallets e apps.

O que é WebSocket?

WebSocket é um protocolo de comunicação bidirecional que permite sessões de comunicação interativa entre um cliente e um servidor. É baseado em TCP e é frequentemente usado por apps e serviços que desejam capacidades de notificação em tempo real.

O que é um servidor WebSocket?

Um servidor WebSocket é uma aplicação que está ouvindo em uma porta TCP, seguindo um protocolo específico. WebSocket é um protocolo de comunicação bidirecional entre um cliente e um servidor, permitindo que ambos solicitem e enviem dados um ao outro.

Em contraste, HTTP é um protocolo de comunicação unidirecional, no qual o cliente só pode enviar solicitações ao servidor e o servidor só pode enviar dados de volta em resposta—nunca o servidor, em uma relação HTTP, solicita algo do cliente.

O que é uma conexão WebSocket?

Uma conexão WebSocket é uma conexão contínua entre o cliente e o servidor. Em contraste, as conexões HTTP são únicas. A conexão começa a cada solicitação que o cliente faz ao servidor e termina com a resposta do servidor. Conexões WebSocket podem ser mantidas pelo tempo que o cliente e o servidor desejarem que fiquem abertas, o que significa que os dados podem fluir por esse WebSocket enquanto as partes desejarem—tudo a partir de uma solicitação inicial.

Qual protocolo o WebSocket usa?

WebSocket usa o protocolo WS, que é baseado no Transmission Control Protocol (TCP). É uma rede orientada a conexão, o que significa que uma conexão entre os participantes precisa ser estabelecida primeiro para rotear os dados até o local correto.

Em contraste, o Internet Protocol determina para onde os dados são enviados com base nas informações contidas naquele pacote de dados; nenhuma configuração prévia é necessária para rotear o pacote.

O que é uma API WebSocket?

Há duas formas de um servidor enviar dados a um cliente. O cliente pode solicitar dados regularmente ao servidor, conhecido como polling, ou o servidor pode enviar dados automaticamente ao cliente, conhecido como server push.

APIs WebSocket aproveitam a conexão entre o cliente e o servidor mantendo-a aberta após a solicitação inicial para usar a técnica de server push, eliminando o estresse de infraestrutura criado por clientes constantemente fazendo polling no servidor em busca de novas atualizações.

Como os WebSockets funcionam?

WebSockets são um método de comunicação bidirecional, permitindo múltiplas respostas a partir de uma única solicitação ao servidor. WebSockets também são usados principalmente para comunicação cliente-servidor, enquanto webhooks são usados principalmente para comunicação servidor-servidor.

Como os WebSockets funcionam de forma diferente em comparação com webhooks?

Em contraste com WebSockets, webhooks, que usam HTTP, são estritamente unidirecionais: o servidor só responde às aplicações quando uma solicitação é feita, e sempre que uma solicitação é atendida, a conexão é encerrada.

Alchemy Notify usa webhooks para se comunicar entre servidores e WebSockets para enviar as notificações que o usuário do dApp vê.

Para que são usados os WebSockets do Web3?

A Subscription API da Alchemy fornece dois novos métodos de API que estendem a funcionalidade da API original do Ethereum - eth_subscribe e eth_unsubscribe - que permitem que desenvolvedores Web3 usem WebSockets para receber continuamente informações ou dados, como informações de transações pendentes, hashes de transações pendentes, novos blocos de cabeçalho e logs.

Aqui estão os métodos suportados pela Subscription API da Alchemy que usam WebSockets:

  • alchemy_newFullPendingTransactions - retorna as informações completas da transação (não apenas os hashes de transação) para todas as transações que são adicionadas ao estado pendente
  • ​​alchemy_filteredNewFullPendingTransactions - retorna as informações da transação para todas as transações pendentes que correspondem a um filtro de endereço de origem ou destino
  • newPendingTransactions - retorna o hash de todas as transações que são adicionadas ao estado pendente, independentemente de você tê-las enviado ou não
  • newHeads - envia um evento sempre que um novo cabeçalho (bloco) é adicionado à blockchain
  • logs - envia logs que fazem parte de blocos recém-adicionados que correspondem a critérios de filtro especificados

Quando alguma conexão WebSocket existente precisa ser encerrada, a chamada eth_unsubscribe pode ser usada junto com o parâmetro de ID de subscription.

Quando usar WebSockets vs webhooks

O trade-off entre usar WebSockets ou webhooks vem de saber se o design da sua infraestrutura consegue lidar melhor com muitas conexões WebSocket abertas simultaneamente ou com muitas solicitações de conexão webhook vindas de clientes.

Se a sua aplicação de servidor roda como uma função em nuvem (AWS Lambda, Google Cloud Functions, etc), use webhooks, porque a aplicação não manterá as conexões WebSocket abertas.

Se a quantidade de notificações enviadas for baixa, webhooks também são superiores, pois as conexões só começam sob a condição de um evento acontecer.

Se o evento for raro, é melhor usar webhooks do que manter abertas muitas conexões WebSocket entre o cliente e o servidor.

Por fim, também importa se você está tentando conectar um servidor a outro servidor ou um cliente a um servidor; webhooks são melhores para o primeiro caso, WebSockets para o segundo. Criamos um repositório no Github para configurar um servidor de webhook.

Quando usar o protocolo WebSocket

Para muitos apps Web3, é obrigatório atualizar seus usuários em tempo real sobre o status de suas transações. Caso contrário, eles podem ter uma experiência de usuário ruim e abandonar seu app ou serviço. Alchemy Notify resolve isso permitindo que os usuários saibam o status exato de suas transações.

Quando usar WebSockets em vez de HTTP

WebSockets devem ser usados em vez de solicitações HTTP sempre que a latência precisar ser a menor possível, para que os usuários recebam notificações sobre eventos assim que eles acontecem. HTTP é comparativamente muito mais lento porque o cliente é limitado na frequência com que pode receber atualizações pela frequência com que envia solicitações.

Exemplos de WebSocket

Criamos guias sobre como implementar o Alchemy Notify para enviar notificações no app, atualizando seus usuários sobre eventos críticos, como quando o saldo de sua wallet muda. Aqui estão alguns tutoriais que publicamos:

  1. Rastreando transações Ethereum pendentes e mineradas
  2. Construindo um dApp com notificações de transação em tempo real
  3. Integrando webhooks da Alchemy com o Zapier

Alchemy Notify pode até ser usado para enviar notificações por e-mail aos usuários do seu dApp, evitando frustração quanto ao status de suas transações.

Background gradient

Construa magia blockchain

A Alchemy combina os produtos e ferramentas de desenvolvimento Web3 mais poderosos com recursos, comunidade e suporte lendário.