net WebSocket 通信

net WebSocket 通信

net WebSocket 通信

功能

net.listen({type: 'ws'}) 启动 WebSocket 服务端,net.connect({type: 'ws'}) 创建 WebSocket 客户端。

服务端语法

客户端语法

服务端配置字段

net.listen({type: 'ws', ...}) 使用以下字段:

字段类型必填默认值说明
typeString固定为 ws
bindStringWebSocket 服务端监听地址,格式为 主机:端口,例如 127.0.0.1:9002。端口写 0 时由系统分配空闲端口。
routeString/wsWebSocket 握手路径。客户端 URL 路径必须与该值一致。
binaryBoolfalse为 true 时,服务端 on_message 的 message 参数返回 Bytes;默认保持 String 兼容行为。
on_connectFn客户端连接成功时调用,回调参数为 socket
on_messageFn收到客户端消息时调用,回调参数为 socket, message
on_closeFn客户端连接关闭时调用,回调参数为 socket
on_errorFn服务端或连接处理错误时调用,回调参数为 message

客户端配置字段

net.connect({type: 'ws', ...}) 使用以下字段:

字段类型必填默认值说明
typeString固定为 ws
urlStringWebSocket 完整连接地址,例如 ws://127.0.0.1:9002/ws

返回值

类型说明
WsServernet.listen({type:'ws'}) 返回的 WebSocket 服务端句柄。
WsSocketWebSocket 连接句柄。服务端回调中的 socket 和客户端 net.connect({type:'ws'}) 返回值都使用该类型。

WsServer 字段和方法

名称类型说明
addrString实际监听地址,格式通常为 host:port;bind 端口为 0 时可从这里读取系统分配后的端口。
typeString固定为 ws
close()Fn -> Bool关闭 WebSocket 服务端监听,成功返回 true。

WsSocket 字段和方法

名称类型说明
addrStringWebSocket 对端地址或连接目标地址,格式通常为 host:port
typeString固定为 ws
send(data)Fn -> Bool发送 WebSocket 消息;String 走文本帧,Bytes 或字节数组走二进制帧,成功返回 true。
write(data)Fn -> Boolsend(data) 的同义方法。
close()Fn -> Bool关闭 WebSocket 连接,成功返回 true。
on_message(fn(message) {}, binary)Fn -> WsSocket客户端连接句柄注册消息回调;第二个参数为 true 时 message 为 Bytes。
on_close(fn() {})Fn -> WsSocket客户端连接句柄注册关闭回调。
on_error(fn(message) {})Fn -> WsSocket客户端连接句柄注册错误回调。

服务端回调参数

回调参数说明
on_connectsocket: WsSocket新客户端连接成功时触发。
on_messagesocket: WsSocket, message: String/Bytes收到客户端消息时触发;binary: true 时 message 为 Bytes,否则为兼容字符串。
on_closesocket: WsSocket客户端连接关闭时触发。
on_errormessage: String服务端或连接处理错误时触发。

示例

注意事项

  • 服务端 route 默认 /ws。
  • WebSocket read() 不支持同步读取;消息通过后台事件回调分发。
  • send/write 传入 Bytes 或字节数组时发送二进制帧;传入 String 时发送文本帧。
  • 默认 on_message 的 message 是字符串;服务端监听配置 binary: true 或客户端 on_message(fn, true) 时为 Bytes。
  • WebSocket 服务端监听、客户端连接和消息读写使用共享 Tokio runtime。
  • 单条文本或二进制消息受 BT_NET_MESSAGE_LIMIT 限制,默认 1048576 字节。
  • send/write 会进入单连接有界写队列,队列长度由 BT_NET_WRITE_QUEUE 控制,默认 1024。
  • 网络事件队列满时,WebSocket 消息事件会触发连接关闭,并增加 BT.stats().net.event_queue_rejected
  • BT_NET_IDLE_TTL_MS 大于 0 时,连接超过该时间没有收到消息会触发错误回调并关闭。