跳转到内容
搜索文档

WebSockets

最后更新 查看 MarkdownAgent 设置

Cloudflare 支持代理的 WebSocket 连接,无需额外配置。

背景

WebSockets 是客户端与源站服务器之间维持的开放连接。在 WebSockets 连接中,客户端和源站可以来回传递数据,而无需重新建立会话。这使得在 WebSockets 连接内交换数据非常快速。WebSockets 常用于实时应用,例如即时聊天和游戏。

启用 WebSockets

要在仪表板中启用发往源站服务器的 WebSockets 连接:

  1. 在 Cloudflare 仪表板中,前往 **Network(网络)**页面。

    Go to Network ↗
  2. 找到 WebSockets(WebSocket),将开关切换至 On(开启)

要使用 API 启用发往源站服务器的 WebSockets 连接,请发送 PATCH 请求,在 URI 路径中将设置名称指定为 websockets,并将 value 参数设置为 "on"

兼容性说明

产品 兼容 说明
Argo Argo 与 WebSockets 不兼容。
SSL
WAF 是* 初始 HTTP 101 请求与其他任何 WebSockets 连接一样,受到 WAF 托管规则、自定义规则、速率限制规则以及其他 WAF 功能的约束。但是,连接一旦建立,WAF 不会执行任何进一步检查。
Workers 您还可以使用 Durable Objects 作为 WebSocket 会话的端点,从而完全控制往返于客户端的消息。

可用性

所有 Cloudflare 计划都支持 WebSockets。

请求和带宽测量

鉴于 WebSocket 连接的性质,您可能会注意到它们在请求和带宽使用方面与典型的 HTTP 流量有所不同。如果您是 Enterprise 客户,考虑 Cloudflare 如何衡量请求和带宽以准确估算您的使用情况至关重要。

Cloudflare 按以下方式衡量单个 WebSocket 连接:

  • 请求:Cloudflare 仅将每个 WebSocket 连接的初始升级 (upgrade) 请求识别为 HTTP 请求。即使您可以通过建立的 WebSocket 连接发送双向消息流,它仍将被计为单个长连接 HTTP 请求。

  • 带宽:Cloudflare 衡量从 Cloudflare 发送到客户端的数据传输。这通常意味着从 Cloudflare 后方的 WebSocket 服务器发送到 WebSocket 客户端的消息会计入带宽使用。

一旦 WebSocket 连接关闭,您可以通过 Traffic Analytics(流量分析)、GraphQL Analytics API 以及 HTTP 请求日志查看聚合的 WebSocket 使用情况。

技术说明

当 Cloudflare 向其全球网络发布新代码时,我们可能会重启服务器,这将终止 WebSockets 连接。

最佳实践

故障排除

使用类似 wscat 的客户端工具可以帮助调查 WebSocket 问题。 能够使用最简化的工具在单个 URL 上重现问题有助于缩小问题范围。

HTTP 请求日志中的 EdgeStartTimestampEdgeStopTimestamp 字段代表 WebSocket 连接的持续时间(它们不代表初始 HTTP 连接的持续时间)。

连接限制

空闲超时

当在一段时间内没有任何方向的数据传输时,Cloudflare 将关闭 WebSocket 连接。Enterprise 客户可以联系其账户团队来配置自定义的空闲超时。为了在不活动期间保持长连接处于活动状态,请实现客户端心跳(ping/pong)机制。

负载均衡 WebSocket 源站的会话亲和性

如果您的 WebSocket 源站位于 Cloudflare 负载均衡器 (Load Balancer) 后方,请开启 Session affinity(会话亲和性),以确保来自同一客户端的所有请求都路由到相同的源站服务器。如果没有会话亲和性,WebSocket 重连可能会落到不包含该会话状态的其他源站上。

这篇文档对您有帮助吗?