WebSocket AT 命令集

备注

  • Websocket AT 命令集默认未启用。

  • 参考 配置 SDK(menuconfig) 进入 CONFIG AT CMD 配置,勾选 Enable WebSocket 来启用 WebSocket AT 命令集。

AT+WSGLCFG

功能说明

配置 WebSocket 客户端全局参数

命令格式

AT+WSGLCFG=[<connect_timeout>][,<recv_timeout>][,<send_timeout>][,<send_blocktime>][,<keepalive_idle>][,<keepalive_interval>][,<keepalive_count>]

响应格式

成功响应:

OK

错误响应:

ERROR:<error_no>

参数

<connect_timeout>:

连接超时时间(毫秒)

  • 非负整数

  • 默认值:0(无限等待)

<recv_timeout>:

接收超时(毫秒)

  • 非负整数

  • 默认值:0(无超时)

<send_timeout>:

发送超时(毫秒)

  • 非负整数

  • 默认值:0(无超时)

<send_blocktime>:

发送阻塞时间(毫秒)

  • 非负整数

  • 特殊值 0 表示立即返回

<keepalive_idle>:

TCP 保活探测起始时间(秒)

  • 范围[1,7200]

  • 默认值:0(禁用)

<keepalive_interval>:

保活探测间隔(秒)

  • 范围[1,75]

  • 默认值:0(禁用)

<keepalive_count>:

保活探测次数

  • 范围[1,10]

  • 默认值:0(禁用)

错误代码

  • 1: 参数范围错误

示例

配置全局参数:

AT+WSGLCFG=5,2000,2000,0,300,5,3

OK

AT+WSCFG

功能说明

配置指定连接 ID 的 WebSocket 客户端参数

命令格式

AT+WSCFG=<link_id>,<ping_interval>,<ping_timeout>[,<tx_buffer_size>][,<rx_buffer_size>][,<max_queue_size>][,<protocol>][,<version>][,<stable_buf_num>]

响应格式

成功响应:

OK

错误响应:

ERROR:<error_no>

参数

<link_id>:

连接 ID

  • 有效范围:0-2

<ping_interval>:

Ping 心跳间隔(秒)

  • 范围[1,7200]

  • 默认值:10

<ping_timeout>:

Ping 超时时间(秒)

  • 范围[1,7200]

  • 默认值:120

<tx_buffer_size>:

发送数据缓冲区大小(字节)

  • 范围[1500,16384]

  • 默认值:1500

<rx_buffer_size>:

接收数据缓冲区大小(字节)

  • 范围[1500,16384]

  • 默认值:1500

<max_queue_size>:

最大队列深度

  • 范围[1,50]

  • 默认值:3

<protocol>:

子协议类型

  • 字符串格式(如”chat”,”superchat”)

  • 默认值:空

<version>:

协议版本

  • 当前仅支持”13”

  • 默认值:13

<stable_buf_num>:

稳定缓冲区数量

  • 范围[1,<max_queue_size>]

  • 默认值:3

错误代码

  • 1: 参数超出范围

  • 2: 内存申请失败

示例

配置连接 ID 0 的相关参数:

AT+WSCFG=0,30,120,2048,1500,5,"chat",13,3

OK

AT+WSHEAD

功能说明

配置 Websocket 客户端的请求头。

一些 Websocket 服务器在连接的时候客户端需要提供 AuthorizationCookie 或者 Origin 等请求头,可以使用该命令进行添加。

每条连接 ID 支持最大 10 条请求头

命令格式

AT+WSHEAD=<link_id>,<header_len>[,<header>]

响应格式

成功响应:

OK

错误响应:

ERROR:<error_no>

参数

<link_id>:

连接 ID

  • 有效范围:0-2

<header_len>:

请求头长度

  • 整条命令受到 命令长度 限制

  • 0:清除所有请求头

<header>:

请求头数据

错误代码

  • 1: 参数超出范围

  • 2: 内存申请失败

  • 3: 连接头数量超过最大值

示例

配置连接 ID 1 的 2 条请求头:

AT+WSHEAD=1,26,Origin: http://example.com

OK
AT+WSHEAD=1,24,Cookie: sessionId=abc789

OK

AT+WSHEADRAW

功能说明

透传(TT)模式 配置 Websocket 客户端的请求头。

适用于单条请求头长度超过 2000 字节或者请求头中包含转义字符的场景。

一些 Websocket 服务器在连接的时候客户端需要提供 AuthorizationCookie 或者 Origin 等请求头,可以使用该命令进行添加。

每条连接 ID 支持最大 10 条请求头

备注

该命令仅支持在 主控控制模式 下使用。

命令格式

AT+WSHEADRAW=<link_id>,<header_len>

响应格式

成功响应:

OK

错误响应:

ERROR:<error_no>

参数

<link_id>:

连接 ID

  • 有效范围:0-2

<header_len>:

请求头长度

  • 长度无限制

  • 0:清除所有请求头

错误代码

  • 1: 参数超出范围

  • 2: 内存申请失败

  • 3: 进入 TT 模式失败

  • 4: 连接头数量超过最大值

示例

配置连接 ID 1 的 2 条请求头:

AT+WSHEADRAW=1,39
>>>
Sec-WebSocket-Protocol: chat, superchat

OK

AT+WSCONN

功能说明

建立 WebSocket 客户端连接

命令格式

AT+WSCONN=<link_id>,<host>[,<path>][,<port>],<conn_type>[,<cert_index>]

响应格式

成功响应:

[$][WS][EVENT]:linkid:<link_id>, connected

OK

错误响应:

ERROR:<error_no>

AT 消息

当连接成功时,会有如下提示消息:

[$][WS][EVENT]:linkid:<link_id>, connected

当连接断开时,会有如下提示消息:

[$][WS][EVENT]:linkid:<link_id>, disconnect

当收到 PONG 消息的时候,会如下提示消息:

[$][WS][EVENT]:linkid:%d, pong

当收到数据包的时候,会如下提示消息:

[$][WS][DATA][<link_id>][<数据长度>]:<数据>

参数

<link_id>:

连接 ID

  • 有效范围:0-2

<host>:

目标主机,不需要 ws:// 或者 wss:// 前缀

  • 支持域名或 IPv4 地址

  • 最大长度:128 字符

<path>:

资源路径

  • 默认值:”/”

  • 最大长度:256 字符

<port>:

端口

  • 范围:[0,65535] (默认值 0)

  • 0: WS 使用 80 端口, WSS 使用 443 端口

<conn_type>:

连接类型

  • 1: Websocket over TCP

  • 2: Websocket over TLS(不校验证书)

  • 3: Websocket over TLS(用 CA 证书验证服务器证书)

  • 4: Websocket over TLS(提供客户端证书给服务器验证)

  • 5: Websocket over TLS(双向认证,3 和 4 的合集)

<cert_index>:

安全证书套件索引,参考 AT 安全证书

  • [1-10]

  • 仅<conn_type>是 3-5 时需要

错误代码

  • 1: 参数超出范围

  • 2: 内存申请失败

  • 3: 套接字创建失败

  • 4: 证书加载失败

  • 5: 连接服务器失败

  • 6: 连接任务创建失败

示例

使用 8433 端口建立 wss 连接,并用 1 号证书套件的 CA 证书验证服务器:

AT+WSCONN=0,echo.websocket.org,/chat,8433,3,1
[$][WS][EVENT]:linkid:0, connected

OK

AT+WSSEND

功能说明

发送 WebSocket 数据

命令格式

AT+WSSEND=<link_id>,<length>[,<use_mask>][,<opcode>],<data>

响应格式

成功响应:

OK

错误响应:

ERROR:<error_no>

参数

<link_id>:

连接 ID

  • 有效范围:0-2

<length>:

数据长度

  • 最大值:AT+WSCFG 中<buffer_size>参数定义的大小

<use_mask>:

数据掩码

  • 0: 禁用

  • 1: 启用(默认)

<opcode>:

帧类型

  • 0: CONTINUATION 帧

  • 1: 文本帧 (默认)

  • 2: 二进制帧

  • 8: 关闭帧

  • 9: PING 帧

  • 10: PONG 帧

<data>:

待发送的数据

错误代码

  • 1: 参数超出范围

  • 2: 连接不可用

示例

发送文本消息:

AT+WSSEND=0,11,1,1,HelloWorld!

OK

AT+WSSENDRAW

功能说明

透传(TT)模式 发送 WebSocket 数据。

备注

该命令仅支持在 主控控制模式 下使用。

命令格式

AT+WSSENDRAW=<link_id>,<length>[,<use_mask>][,<opcode>]

响应格式

成功响应:

OK

错误响应:

ERROR:<error_no>

参数

<link_id>:

连接 ID

  • 有效范围:0-2

<length>:

数据长度

  • 无长度限制

<use_mask>:

数据掩码

  • 0: 禁用

  • 1: 启用(默认)

<opcode>:

帧类型

  • 0: CONTINUATION 帧

  • 1: 文本帧 (默认)

  • 2: 二进制帧

  • 8: 关闭帧

  • 9: PING 帧

  • 10: PONG 帧

错误代码

  • 1: 参数超出范围

  • 2: 连接不可用

  • 3: 内存申请失败

  • 4: 进入 TT 模式失败

示例

发送 10 个字节的文本消息:

AT+WSSENDRAW=0,10,1,1
>>>
1234567890

OK

AT+WSDISCONN

功能说明

主动关闭指定连接 ID 的 WebSocket 客户端连接

命令格式

AT+WSDISCONN=<link_id>

响应格式

成功响应:

OK

错误响应:

ERROR:<error_no>

参数

<link_id>:

连接 ID

  • 有效范围:0-2

错误代码

  • 1: 参数超出范围

  • 2: 连接不可用

示例

关闭连接 ID 0 的连接:

AT+WSDISCONN=0

OK
[$][WS][EVENT]:linkid:0, disconnect

AT+WSQUERY

功能说明

查询 Websocket 客户端相关信息,包括全局配置信息或者指定连接 ID 的信息

命令格式

AT+WSQUERY=[<link_id>]

响应格式

成功响应:

Global config:
connect_timeout: <连接超时时间(秒)>
recv_timeout: <接收超时(毫秒)>
send_timeout: <发送超时(毫秒)>
send_blocktime: <发送阻塞时间(毫秒)>
keepalive_idle: <TCP 保活探测起始时间(秒)>
keepalive_interval: <保活探测间隔(秒)>
keepalive_count: <保活探测次数>
link_id: <连接 ID>
status: <连接状态,0:关闭中,1:已关闭,2,连接中,3,已连接>
ping_interval: <Ping 心跳间隔(秒)>
ping_timeout: <Ping 超时时间(秒)>
buffer_size: <数据缓冲区大小(字节)>
max_queue_size: <最大队列深度>
protocol: <子协议类型>
version: <协议版本>
stable_buf_num: <稳定缓冲区数量>
header:
<请求头信息 1>
<请求头信息 2>
...

OK

错误响应:

ERROR:<error_no>

参数

<link_id>:

连接 ID

  • 有效范围:0-2

  • 缺省该参数将输出所有连接 ID 信息

错误代码

  • 1: 参数超出范围

示例

查询连接 ID 0 的相关信息:

AT+WSQUERY=0
Global config:
connect_timeout: 3000
recv_timeout: 3000
send_timeout: 3000
send_blocktime: 4000
keepalive_idle: 0
keepalive_interval: 0
keepalive_count: 0
link_id: 0
status: 3
ping_interval: 20
ping_timeout: 60
buffer_size: 4096
max_queue_size: 12
protocol:
version: 13
stable_buf_num: 8
header:
Sec-WebSocket-Protocol: chat, superchat
Origin: http://example.com

OK

AT+WSTXQUEUECHECK

功能说明

检查指定连接 ID 的 tx 队列是否已满

命令格式

AT+WSTXQUEUECHECK=<link_id>

响应格式

成功响应:

OK

错误响应:

ERROR:<error_no>

参数

<link_id>:

连接 ID

  • 有效范围:0-2

错误代码

  • 1: 参数超出范围

  • 2: 连接不可用

示例

检查连接 ID 0 的 tx 队列:

AT+WSTXQUEUECHECK=0

OK
Tx queue is not full

AT+WSSRVCFG

功能说明

配置 WebSocket 服务器参数

命令格式

AT+WSSRVCFG=[<max_conn>][,<ping_interval>][,<idle_timeout>][,<tx_size>][,<rx_size>]

响应格式

成功响应:

OK

错误响应:

ERROR:<error_no>

参数

<max_conn>:

最大连接数量

  • 范围[1,3]

  • 默认值:3

<ping_interval>:

ping 包间隔(秒)

  • 范围[1,7200]

  • 默认值:30

<idle_timeout>:

空闲超时(秒)

  • 连续没有任何报文通信的时间超过空闲超时将主动关闭连接

  • 范围[0,7200]

  • 默认值:0(无超时)

<tx_size>:

发送缓存(字节)

  • 范围[1,16384]

  • 默认值:4096

<rx_size>:

接收缓存(字节)

  • 范围[1,16384]

  • 默认值:4096

错误代码

  • 1: 参数范围错误

示例

配置 Websocket 服务器参数:

AT+WSSRVCFG=2,30,90,16384,16384

OK

AT+WSSRVSTART

功能说明

启动 WebSocket 服务器

命令格式

AT+WSSRVSTART=[<port>],<conn_type>[,<cert_index>]

响应格式

成功响应:

OK

错误响应:

ERROR:<error_no>

AT 消息

当有客户端成功连接时,会有如下提示消息

[$][WSSRV][EVENT]:linkid:<link_id>, connected

当连接断开时,会有如下提示消息

[$][WSSRV][EVENT]:linkid:<link_id>, disconnected, reason:<断开原因>

当收到数据包的时候,会如下提示消息

[$][WSSRV][DATA][<link_id>][<opcode>][<数据长度>]:<数据>

备注

断开原因列表

  • 1: 创建连接失败

  • 2: 连接初始化失败

  • 3: 客户端主动断开

  • 4: 服务器主动断开

  • 5: TLS 握手失败

  • 6: TLS 握手超时

  • 7: Select 监听失败

  • 9: Socket 设置失败

  • 10: 读取失败

  • 11: 发送失败

  • 13: PING 响应超时

  • 14: 空闲超时

参数

<port>:

端口

  • 范围:[0,65535] (默认值 0)

  • 0: WS 使用 80 端口, WSS 使用 443 端口

<conn_type>:

连接类型

  • 1: Websocket Server over TCP

  • 2: Websocket Server over TLS(提供服务器证书给客户端验证)

  • 3: Websocket Server over TLS(提供服务器证书给客户端验证并且用 CA 证书验证客户端证书)

<cert_index>:

安全证书套件索引,参考 AT 安全证书

  • [1-10]

  • 仅<conn_type>是 2 和 3 时需要

错误代码

  • 1: 参数范围错误

  • 2: 服务器已运行

  • 3: 获取证书套件失败

  • 4: 内存申请失败

  • 5: 设置证书失败

  • 6: 启动服务器失败

示例

在端口 80 上启动 Websocket 服务器:

AT+WSSRVSTART=0,1

OK

在端口 8433 启动 TLS 的 Websocket 服务器,并使用服务器证书套件 2:

AT+WSSRVSTART=8433,2,2

OK

AT+WSSRVDISCONN

功能说明

断开指定连接 ID 的 WebSocket 客户端连接

命令格式

AT+WSSRVDISCONN=<link_id>

响应格式

成功响应:

OK

错误响应:

ERROR:<error_no>

参数

<link_id>:

连接 ID

  • 范围:[0,2]

错误代码

  • 1: 参数范围错误

  • 2: 连接不可用

示例

断开连接 ID 2 的客户端连接:

AT+WSSRVDISCONN=2

OK

AT+WSSRVSTOP

功能说明

关闭 WebSocket 服务器

命令格式

AT+WSSRVSTOP

响应格式

成功响应:

OK

参数

错误代码

AT+WSSRVSEND

功能说明

向指定连接 ID 发送 WebSocket 数据

命令格式

AT+WSSRVSEND=<link_id>,<length>[,<opcode>],<data>

响应格式

成功响应:

OK

错误响应:

ERROR:<error_no>

参数

<link_id>:

连接 ID

  • 有效范围:0-2

<length>:

数据长度

  • 最大值:AT+WSSRVCFG 中<tx_buff>参数定义的大小

<opcode>:

帧类型

  • 0: CONTINUATION 帧

  • 1: 文本帧 (默认)

  • 2: 二进制帧

  • 8: 关闭帧

  • 9: PING 帧

  • 10: PONG 帧

<data>:

待发送的数据

错误代码

  • 1: 参数范围错误

  • 2: 内存申请失败

示例

向连接 ID 1 发送发送文本消息:

AT+WSSRVSEND=1,11,1,HelloWorld!

OK

AT+WSSRVSENDRAW

功能说明

透传(TT)模式 向指定连接 ID 发送 WebSocket 数据。

备注

该命令仅支持在 主控控制模式 下使用。

命令格式

AT+WSSRVSENDRAW=<link_id>,<length>[,<opcode>]

响应格式

成功响应:

OK

错误响应:

ERROR:<error_no>

参数

<link_id>:

连接 ID

  • 有效范围:0-2

<length>:

数据长度

  • 无长度限制

<opcode>:

帧类型

  • 0: CONTINUATION 帧

  • 1: 文本帧 (默认)

  • 2: 二进制帧

  • 8: 关闭帧

  • 9: PING 帧

  • 10: PONG 帧

错误代码

  • 1: 参数范围错误

  • 2: 内存申请失败

  • 3: 进入 TT 模式失败

示例

向连接 ID 0 发送 10 个字节的文本消息:

AT+WSSRVSENDRAW=0,10,1
>>>
1234567890

OK

AT+WSSRVQUERY

功能说明

查询 Websocket 服务端相关信息,包括全局配置信息和所有连接 ID 的信息

命令格式

AT+WSSRVQUERY

响应格式

成功响应:

port:
max_conn: <端口>
ping_interval: <ping 包间隔(秒)>
idle_timeout: <空闲超时(秒)>
tx_size: <发送缓存(字节)>
rx_size: <接收缓存(字节)>
link_id: <连接 ID>
status: <连接状态,0:已关闭,1:连接中,2,已连接,3,已连接,且发送了 ping 包,暂未收到 pong 包,4:关闭中>
ip: <客户端 ipv4 地址>
link_id: <连接 ID>
status: <连接状态,0:已关闭,1:连接中,2,已连接,3,已连接,且发送了 ping 包,暂未收到 pong 包,4:关闭中>
ip: <客户端 ipv4 地址>
...

OK

参数

错误代码

示例

查询 Websocket 服务器的相关信息:

AT+WSSRVQUERY
port: 1000
max_conn: 3
ping_interval: 30
idle_timeout: 0
tx_size: 4096
rx_size: 4096
link_id: 0
status: 2
ip: 192.168.1.105

OK