---
title: "O que é um WebSocket e como ele funciona"
description: "O que são e como funcionam no Web3"
---

# O que é um WebSocket e como ele funciona

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](https://www.alchemy.com/docs/reference/webhooks-overview) para eventos críticos de forma contínua, em comparação com a exigência de solicitações individuais. Ferramentas como [Alchemy Notify](https://www.alchemy.com/notify?a=e35dd0b6f1) tornam simples adicionar notificações em tempo real a wallets e [apps](https://www.alchemy.com/dapps/top/defi-dapps).

## 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](http://www.alchemy.com/overviews/what-is-a-webhook), 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](https://www.alchemy.com/docs/reference/notify-api-quickstart) 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](https://www.alchemy.com/docs/reference/subscription-api) 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](https://github.com/alchemyplatform/webhook-examples).

### 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](https://www.alchemy.com/docs/how-to-send-transactions-on-ethereum)
1. [Construindo um dApp com notificações de transação em tempo real](https://www.alchemy.com/docs/reference/webhooks-overview)
1. [Integrando webhooks da Alchemy com o Zapier](https://www.alchemy.com/docs/reference/webhooks-overview)

[Alchemy Notify](https://www.alchemy.com/notify?a=e35dd0b6f1) 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.
