Skip to content
返回云服务

Cloudflare 边缘 WebSocket

Workers 双向 WebSocket 连接,可休眠套接字实现低成本持久连接。

Cloudflare进阶

为什么

Workers 支持 WebSocket 服务端和可休眠套接字 — 连接持久不计空闲费,仅消息耗 CPU。1 万连接聊天应用约 $5/月 vs VPS $200+。

Cloudflare 网络覆盖 125+ 国家的 330+ 城市,服务 20% 的互联网流量。Workers 冷启动为 0ms(基于 isolate),免费套餐覆盖每天 10 万请求。

何时使用

用于聊天、实时仪表盘、协同编辑和通知。避免需 >1MB 帧的二进制协议或数百万并发(用 Durable Objects 分片)。

如何做

1. 接受升级 — const [client, server] = Object.values(new WebSocketPair()); ctx.acceptWebSocket(server) 2. 返回 client — new Response(null, { status: 101, webSocket: client }) 3. 可休眠 — 用 acceptWebSocket(非 adoptWebSocket)空闲免费 4. handler — webSocketMessage(ws, msg)、webSocketClose(ws)、webSocketError(ws) 5. 广播 — ctx.getWebSockets().forEach(ws => ws.send(data)) 6. 标记套接字 — ctx.acceptWebSocket(server, ["room:42"]) 过滤广播 7. Durable Objects — 房间范围状态,路由 WS 到 DO 实例

示例

export default { async fetch(request: Request, env: Env): Promise<Response> { if (request.headers.get("Upgrade") !== "websocket") { return new Response("需要 WS", { status: 426 }); } const pair = new WebSocketPair(); const [client, server] = Object.values(pair); env.ctx.acceptWebSocket(server); // 可休眠 return new Response(null, { status: 101, webSocket: client }); }, async webSocketMessage(ws: WebSocket, msg: string) { // 广播给所有连接的客户端 for (const peer of this.ctx.getWebSockets()) { peer.send(`echo: ${msg}`); } }, async webSocketClose(ws: WebSocket) { console.log("客户端断开"); }, };

常见问题

  • ⚠1MB 消息大小限制 — 大负载须跨多条消息分块
  • ⚠getWebSockets() 返回 Worker 全部 — 房间范围用标签或 Durable Objects
  • ⚠无 ws.ping() — Workers 不暴露 ping/pong,依赖应用层心跳

最佳实践

  • ✓用可休眠套接字(acceptWebSocket)— 空闲连接免费,便宜 10 倍
  • ✓按房间/用户标记套接字 — getWebSockets(tag) 高效过滤广播
  • ✓每 30 秒发心跳 — 代理/CDN 60-100 秒后丢弃空闲 WS

常见问题解答

什么是Cloudflare 边缘 WebSocket?它解决什么问题?

Workers 双向 WebSocket 连接,可休眠套接字实现低成本持久连接。 它可帮助开发者在不自建基础设施的前提下完成部署、存储与扩展,是云服务选型的核心参考。

如何在 5 分钟内上手Cloudflare 边缘 WebSocket?

两步即可跑通:① 接受升级 — const [client, server] = Object.values(new WebSocketPair()); ctx.acceptWebSocket(server);② 返回 client — new Response(null, { status: 101, webSocket: client })。建议先用免费套餐验证流程,再接入生产环境。

Cloudflare 边缘 WebSocket 最容易踩的坑是什么?

最高频的问题是:1MB 消息大小限制 — 大负载须跨多条消息分块。建议在上线前用 checklist 逐项核对,并在 CI 中加入策略与配置扫描。

Cloudflare 边缘 WebSocket 的最佳实践有哪些?

Cloudflare 边缘 WebSocket 的最佳实践包括:用可休眠套接字(acceptWebSocket)— 空闲连接免费,便宜 10 倍;按房间/用户标记套接字 — getWebSockets(tag) 高效过滤广播;每 30 秒发心跳 — 代理/CDN 60-100 秒后丢弃空闲 WS。其中首条「用可休眠套接字(acceptWebSocket)— 空闲连接免费,便宜 10 倍」应作为团队默认规范写入 IaC 模板。

Cloudflare 边缘 WebSocket 如何控制成本与避免账单意外?

三招防超支:① 为所有资源打 env/team 标签并启用账单告警;② 用预算阈值触发 Slack/邮件通知;③ 定期用 Cost Explorer 审查闲置资源并清理。Cloudflare 边缘 WebSocket 多数提供免费套餐,先在免费额度内验证再放量。