WebSocket 协议支持 | 腾讯云开发 CloudBase - AI 原生后端一体化平台
跳到主要内容

WebSocket 协议支持

本文介绍如何在 Web 云函数中实现 WebSocket 长连接,支持服务端与客户端之间的双向实时通信。

什么是 WebSocket

「WebSocket」是一种在单个 TCP 连接上进行全双工通信的协议,允许服务端主动向客户端推送数据。与传统的 HTTP 请求-响应模式不同,WebSocket 建立连接后可以保持长连接,实现服务端和客户端之间的实时双向数据传输。

主要特点

  • 全双工通信:服务端和客户端可以同时发送和接收消息
  • 持久连接:建立连接后保持长连接,无需重复握手
  • 低延迟:消息传递实时高效,适合实时应用场景
  • 协议切换:通过 HTTP Upgrade 机制从 HTTP 协议升级为 WebSocket 协议

典型应用场景

  • 实时聊天应用
  • 在线协作编辑
  • 实时数据监控
  • 游戏服务器
  • 实时通知推送

工作原理

服务启动

在支持 WebSocket 的 Web 云函数中,通过启动文件启动 WebSocket 服务器,服务器必须在 9000 端口 上监听。

建立连接

  1. 客户端通过 ws://wss:// 协议向云函数发起连接请求
  2. 云函数平台将连接透传给运行环境中的 WebSocket 服务进程(9000 端口)
  3. 连接协商及后续通信完全由您的 WebSocket 服务端代码处理

连接生命周期

  • 连接与实例映射:一次 WebSocket 连接的生命周期等同于一次函数调用请求
    • 连接建立 = 请求发起
    • 连接断开 = 请求结束
  • 实例映射:函数实例与连接是一一对应的,同一实例在某一时刻仅处理一个 WebSocket 连接,新连接会启动新的 实例
  • 连接保持:连接建立后,实例持续运行,处理双向数据传输
  • 连接结束:当 WebSocket 连接断开时,对应的函数实例停止运行

使用限制

在使用 WebSocket 时,需要注意以下配额限制:

限制项说明
空闲超时时间10 ~ 7200 秒,连接上无消息传输时的超时时间
执行超时时间必须 ≥ 空闲超时时间,函数的最大运行时长
单次消息大小最大 256KB
单连接传输速率最大 128KB/s
单连接请求 QPS最大 10 次/秒

连接断开与状态码

不同的断开情况对应不同的函数状态码:

断开情况函数表现函数状态码
正常关闭
状态码为 1000、1010、1011
函数正常执行结束200
异常关闭
非标准关闭状态码
函数异常结束439 (服务端关闭)
456 (客户端关闭)
空闲超时
连接无消息传输超过配置时间
函数异常结束455
执行超时
连接持续时间超过函数最大运行时长
函数异常结束433

操作步骤

步骤1:开启 WebSocket 协议支持

在创建或编辑云函数时,需要在控制台开启 WebSocket 协议支持。

  1. 登录 云开发平台/云函数/函数列表
  2. 点击「新建云函数」或选择已有函数点击「编辑」
  3. 在「函数配置」中找到「WebSocket 协议」配置项

显示 WebSocket 协议开关和空闲超时时间配置

  1. 开启「WebSocket 协议」开关
  2. 设置「WebSocket 空闲超时时间」(范围:10-7200 秒)
  3. 确保「执行超时时间」≥「空闲超时时间」
  4. 点击「保存」完成配置

⚠️ 注意:WebSocket 协议一旦开启后不可取消,但空闲超时时间可以后续修改。

步骤2:安装依赖并编写服务端代码