WebSocket API
O WebSocket Proxy permite que sua Edge Application 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.
Modos Servidor e Cliente
- Use a função
upgradeWebSocket()
para tratar requisições de upgrade WebSocket no lado servidor. - Para conexões de saída (cliente), utilize a API padrão
WebSocket(url)
.
Helpers de Broadcast
- Faça broadcast de mensagens para todos os clientes conectados usando helpers nativos, permitindo fan-out eficiente com pouco código.
Métricas e Logs
Esses eventos ficam visíveis em Real-Time Metrics e LogStream, ajudando a monitorar conexões e atividades de mensagens.
websocket.connection.accepted
message.sent
message.received
Suporte ao Edge Firewall
- As regras do Edge Firewall podem inspecionar o tráfego WebSocket antes do upgrade ser finalizado.
- Certifique-se de que suas políticas de firewall estão configuradas para lidar com conexões WebSocket conforme necessário.
Exemplo
export default { async fetch(request, env, ctx) { // Check if the request is a WebSocket upgrade if (request.headers.get("upgrade") === "websocket") { // Use the upgradeWebSocket function to handle the WebSocket upgrade const { response, socket } = upgradeWebSocket(request);
// Handle WebSocket events socket.addEventListener("open", () => { console.log("WebSocket connection established"); });
socket.addEventListener("message", (event) => { console.log(`Message received: ${event.data}`); socket.send("pong"); // Respond with "pong" });
socket.addEventListener("close", () => { console.log("WebSocket connection closed"); });
socket.addEventListener("error", (error) => { console.error("WebSocket error:", error); });
// Return the response to complete the WebSocket upgrade return response; }
// If the request is not a WebSocket upgrade, serve a simple HTML page const htmlContent = ` <!DOCTYPE html> <html> <head> <title>WebSocket Example</title> </head> <body> <h1>WebSocket Example</h1> <script> const socket = new WebSocket("wss://" + location.host); socket.onopen = () => console.log("WebSocket connected"); socket.onmessage = (event) => console.log("Message from server:", event.data); socket.onclose = () => console.log("WebSocket disconnected"); socket.onerror = (error) => console.error("WebSocket error:", error); </script> </body> </html> `;
return new Response(htmlContent, { status: 200, headers: { "Content-Type": "text/html" }, }); },};