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" },
});
},
};