WebSocket
A WebSocket API do Azion Runtime: como uma function aceita um upgrade WebSocket, abre uma conexão de saída e onde os eventos dela aparecem.
A WebSocket API do Azion Runtime permite que uma function atue como servidor ou como cliente WebSocket e transporte tráfego bidirecional para serviços de backend. A própria function aceita ou abre a conexão, o que diferencia esta API do WebSocket Proxy, em que uma aplicação apenas transporta a conexão até um servidor WebSocket na sua origem. Use a WebSocket API para cargas de trabalho em tempo real, como chat, jogos multiplayer, dashboards de telemetria e fluxos de inferência de AI.
Disponibilidade
A WebSocket API está disponível para clientes com Business, Enterprise ou Mission-Critical Support e para clientes com contrato de Reserva de Capacidade ou de Saving Plan. Para solicitar acesso, entre em contato com o suporte técnico.
Modos servidor e cliente
Uma function com deploy feito acessa os dois modos por meio de dois globais:
| Global | Modo | Descrição |
|---|---|---|
upgradeWebSocket(request) | Servidor | Aceita o upgrade WebSocket de uma requisição recebida. Retorna um objeto com response e socket: retorne response do handler para concluir o upgrade e use socket para enviar e receber mensagens. |
WebSocket(url) | Cliente | O construtor padrão WebSocket. Abre uma conexão WebSocket de saída da function para url. |
upgradeWebSocket() aceita apenas uma requisição cujo header upgrade contém websocket. Chamada com qualquer outra requisição, a função lança TypeError: Invalid Header: 'upgrade' header must contain 'websocket'. Por isso, verifique o header antes da chamada, como faz o exemplo abaixo.
O Azion Runtime também oferece helpers que fazem o broadcast de uma mensagem para todos os clientes conectados, de modo que uma function pode distribuir uma mensagem para todas as conexões dela.
Métricas e logs
A atividade WebSocket gera três eventos, que aparecem em Real-Time Metrics e em Data Stream para ajudar você a monitorar conexões e mensagens:
websocket.connection.acceptedmessage.sentmessage.received
Inspeção pelo firewall
As regras de um firewall podem inspecionar o tráfego WebSocket antes que o upgrade seja concluído. Verifique se as regras do seu firewall deixam passar as conexões WebSocket que a sua function precisa aceitar.
Exemplo
Este handler aceita um upgrade WebSocket quando a requisição traz upgrade: websocket, registra em log os eventos open, message, close e error do socket e responde a cada mensagem com pong. Qualquer outra requisição recebe uma página HTML cujo script abre uma conexão WebSocket de volta para o mesmo host:
Uma function com deploy feito retorna esta resposta a uma requisição sem o header upgrade. O corpo é a página HTML, com as quebras de linha escapadas: