# WebSocket Proxy

import DocButton from '~/components/webkit/DocButton.vue';

O módulo **WebSocket Proxy** para **Applications** permite que você estabeleça o protocolo de comunicação WebSocket entre sua origem e seus usuários sob a arquitetura de proxy reverso. Esse tipo de protocolo consiste em uma única conexão TCP bidirecional que permite que os dados sejam trocados em tempo real através de um único handshake sem a necessidade de reiniciar a conexão.

Os WebSockets são projetados para minimizar a latência e aumentar a eficiência, e são adequados para aplicações que trocam dados em tempo real, como jogos online, plataformas de bate-papo, notificações e serviços de transmissão ao vivo. Consulte a [especificação do protocolo WebSocket](https://datatracker.ietf.org/doc/html/rfc6455) para obter mais informações.

:::note
No momento, esta funcionalidade está disponível exclusivamente para clientes **Business**, **Enterprise** e **Mission-Critical** Support, também disponível nos contratos **Reserved Capacity** ou **Saving Plan**. [Contate o time de Suporte](https://tickets.azion.com/pt-br/support/login) para solicitar acesso a esta funcionalidade.
:::
:::caution  
Devido à sua natureza de conexão aberta bidirecional, WebSocket Proxy é incompatível com o uso dos módulos [Image Processor](/pt-br/documentacao/produtos/build/applications/image-processor/), [Cache](/pt-br/documentacao/produtos/build/applications/cache/) ou [Tiered Cache](/pt-br/documentacao/produtos/build/applications/cache/tiered-cache/).
:::

## Implementação

| Escopo | Recurso |
| --- | --- |
| Primeiros passos de Applications | [Primeiros passos](/pt-br/documentacao/produtos/build/applications/primeiros-passos/) |
| Functions WebSocket API | [WebSocket API](/pt-br/documentacao/runtime/api-reference/websocket/) |
| Debug Rules | [Debug Rules](/pt-br/documentacao/produtos/guias/debug-regras/) |

## Suporte WebSocket do Functions

As Azion Functions suportam **WebSocket API**, permitindo que sua Applications atue como um servidor ou cliente WebSocket completo e faça proxy de tráfego bidirecional para serviços de backend. Isso habilita casos de uso em tempo real, como chat, jogos multiplayer, dashboards de telemetria e fluxos de inferência de AI — tudo servido diretamente do edge para latência subsegundo.

**Principais Recursos:**
- **Modos servidor e cliente**: Use `upgradeWebSocket()` para handlers do lado servidor ou a API padrão WebSocket(url) para conexões de saída
- **Helpers de broadcast**: Facilite o fan-out de mensagens para todos os clientes conectados com código mínimo
- **Suporte ao Firewall**: As regras do Firewall podem inspecionar o tráfego WebSocket antes do processo de upgrade ser finalizado

<DocButton href="/pt-br/documentacao/runtime/api-reference/websocket/" label="Ir para referência da WebSocket API" kind="secondary" target="_blank" size="medium" />

## Requisitos

Seu cliente e servidor devem suportar a conexão WebSocket nativamente para que o protocolo seja implementado em suas applications. Do lado do cliente, a maioria dos navegadores inclui suporte nativo a WebSocket. Veja a [lista completa de browsers com suporte ao WebSocket](https://caniuse.com/websockets).

### Cabeçalhos de upgrade

A aplicação deverá injetar os cabeçalhos HTTP `Upgrade: websocket` e `Connection: upgrade` na origem para que a conexão seja estabelecida com sucesso. Caso os cabeçalhos `Connection` e `Upgrade` sejam enviados pelo cliente com valores diferentes dos especificados acima ou um deles não esteja presente, o upgrade de conexão no request de usuários para a origem não será efetuado.

---

## Tratamento de erros

Por padrão, uma application que tenha o módulo **WebSocket Proxy** habilitado irá considerar que qualquer requisição recebida com os cabeçalhos `Upgrade: websocket` e `Connection: upgrade` é passível de conexão websocket e irá encaminhá-los para origem. É recomendado que a própria aplicação controle o envio dos cabeçalhos nos casos onde o protocolo deverá ser usado.

A conexão WebSocket válida retornará o status `101 Switching Protocols`. Caso este não seja o status recebido, mesmo que seja da família de status de sucesso `2xx` ou `3xx`, é provável que a requisição do cliente, a application ou o servidor de origem não tenham completado a conexão Websocket. Nesse caso, você deverá revisar os [requisitos para o upgrade da conexão](#requisitos) e fazer os ajustes necessários.

---

## Limites

:::tip
**Aumente limites** <br></br>
Você pode solicitar o aumento dos limites com base no seu plano. Contate o [time de suporte técnico](/pt-br/documentacao/servicos/suporte/) para fazer a solicitação.
:::

Estes são os **limites default**:

| Escopo | Limite |
| --- | --- |
| Tempo máximo de conexão¹ | 15 minutos |

> ¹ A Azion recicla [conexões keepalive](/pt-br/documentacao/produtos/build/applications/#keepalive-timeout) nos seus servidores aproximadamente a cada *15 minutos*. Portanto, conexões WebSocket ativas poderão ser encerradas se ultrapassarem esse intervalo. Neste caso, sua aplicação deverá tratar esses cenários e restabelecer a conexão sempre que necessário.