WebSocket 协议支持
本文介绍如何在 Web 云函数中实现 WebSocket 长连接,支持服务端与客户端之间的双向实时通信。
什么是 WebSocket
「WebSocket」是一种在单个 TCP 连接上进行全双工通信的协议,允许服务端主动向客户端推送数据。与传统的 HTTP 请求-响应模式不同,WebSocket 建立连接后可以保持长连接,实现服务端和客户端之间的实时双向数据传输。
主要特点:
- 全双工通信:服务端和客户端可以同时发送和接收消息
- 持久连接:建立连接后保持长连接,无需重复握手
- 低延迟:消息传递实时高效,适合实时应用场景
- 协议切换:通过 HTTP Upgrade 机制从 HTTP 协议升级为 WebSocket 协议
典型应用场景:
- 实时聊天应用
- 在线协作编辑
- 实时数据监控
- 游戏服务器
- 实时通知推送
工作原理
服务启动
在支持 WebSocket 的 Web 云函数中,通过启动文件启动 WebSocket 服务器,服务器必须在 9000 端口 上监听。
建立连接
- 客户端通过
ws://或wss://协议向云函数发起连接请求 - 云函数平台将连接透传给运行环境中的 WebSocket 服务进程(9000 端口)
- 连接协商及后续通信完全由您的 WebSocket 服务端代码处理
连接生命周期
- 连接与实例映射:一次 WebSocket 连接的生命周期等同于一次函数调用请求
- 连接建立 = 请求发起
- 连接断开 = 请求结束
- 实例映射:函数实例与连接是一一对应的,同一实例在某一时刻仅处理一个 WebSocket 连接,新连接会启动新的实例
- 连接保持:连接建立后,实例持续运行,处理双向数据传输
- 连接结束:当 WebSocket 连接断开时,对应的函数实例停止运行
使用限制
在使用 WebSocket 时,需要注意以下配额限制:
| 限制项 | 说明 |
|---|---|
| 空闲超时时间 | 10 ~ 7200 秒,连接上无消息传输时的超时时间 |
| 执行超时时间 | 必须 ≥ 空闲超时时间,函数的最大运行时长 |
| 单次消息大小 | 最大 256KB |
| 单连接传输速率 | 最大 128KB/s |
| 单连接请求 QPS | 最大 10 次/秒 |
连接断开与状态码
不同的断开情况对应不同的函数状态码:
| 断开情况 | 函数表现 | 函数状态码 |
|---|---|---|
| 正常关闭 状态码为 1000、1010、1011 | 函数正常执行结束 | 200 |
| 异常关闭 非标准关闭状态码 | 函数异常结束 | 439 (服务端关闭) 456 (客户端关闭) |
| 空闲超时 连接无消息传输超过配置时间 | 函数异常结束 | 455 |
| 执行超时 连接持续时间超过函数最大运行时长 | 函数异常结束 | 433 |
操作步骤
步骤1:开启 WebSocket 协议支持
在创建或编辑云函数时,需要在控制台开启 WebSocket 协议支持。
- 登录 云开发平台/云函数/函数列表
- 点击「新建云函数」或选择已有函数点击「编辑」
- 在「函数配置」中找到「WebSocket 协议」配置项

- 开启「WebSocket 协议」开关
- 设置「WebSocket 空闲超时时间」(范围:10-7200 秒)
- 确保「执行超时时间」≥「空闲超时时间」
- 点击「保存」完成配置
⚠️ 注意:WebSocket 协议一旦开启后不可取消,但空闲超时时间可以后续修改。