net TCP 通信

net TCP 通信

net TCP 通信

功能

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

服务端语法

客户端语法

服务端配置字段

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

字段类型必填默认值说明
typeString固定为 tcp
bindStringTCP 监听地址,格式为 主机:端口,例如 127.0.0.1:9000。端口写 0 时由系统分配空闲端口。
binaryBoolfalse为 true 时,on_message 的 message 参数返回 Bytes;默认保持 String 兼容行为。
on_connectFn客户端连接成功时调用,回调参数为 client
on_messageFn收到客户端数据时调用,回调参数为 client, message
on_closeFn客户端连接关闭时调用,回调参数为 client
on_errorFn服务端监听或连接处理出错时调用,回调参数为 message

客户端配置字段

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

字段类型必填默认值说明
typeString固定为 tcp
hostStringTCP 服务端主机名或 IP 地址。
portIntTCP 服务端端口号。
timeoutInt0连接、读取、写入超时时间,单位毫秒;小于等于 0 表示不设置超时。

返回值

类型说明
TcpServernet.listen({type:'tcp'}) 返回的 TCP 服务端句柄。
TcpClientnet.connect({type:'tcp'}) 返回的 TCP 客户端句柄,也会作为服务端回调中的 client 参数。

TcpServer 字段和方法

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

TcpClient 字段和方法

名称类型说明
addrString客户端连接的远端地址,格式通常为 host:port
typeString固定为 tcp
write(data)Fn -> Int写入 String、字节数组或 Bytes,返回写入字节数。
send(data)Fn -> Intwrite(data) 的同义方法。
read()Fn -> String同步读取一段数据,按 UTF-8 lossy 转为字符串;用于 net.connect 创建的客户端。
read_bytes()Fn -> Bytes同步读取一段原始字节;用于 net.connect 创建的客户端。
close()Fn -> Bool关闭 TCP 连接,成功返回 true。

回调参数

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

示例

注意事项

  • on_message 回调参数为 client 和 message。默认 message 是按 UTF-8 lossy 转换后的字符串;监听配置 binary: true 时为 Bytes。
  • write/send 返回写入字节数。read 返回字符串,read_bytes 返回 Bytes。
  • 服务端 on_connect/on_message/on_close 回调中的 client 由后台读任务驱动,应通过 on_message 接收数据,不要再调用 client.read() 双读同一个连接。
  • TCP 服务端 accept、连接读取和写入调度使用共享 Tokio runtime,不再为每个连接创建独立读取线程。
  • 单条读写消息受 BT_NET_MESSAGE_LIMIT 限制,默认 1048576 字节。
  • 服务端回调中的连接写入会进入单连接有界写队列,队列长度由 BT_NET_WRITE_QUEUE 控制,默认 1024。
  • 网络事件队列满时,TCP 消息事件会触发连接关闭,并增加 BT.stats().net.event_queue_rejected
  • BT_NET_IDLE_TTL_MS 大于 0 时,服务端连接超过该时间没有收到数据会触发错误回调并关闭。