Repository navigation
Messaging and Lifecycle
send() 发送一条应用消息,recv() 返回一条完整消息;应用无需像 TCP 那样自行处理字节流粘包。当前库对发送数据要求:非空,首字节为 0xfe。接收 API 不返回原始 RakNet 帧、可靠模式或通道元数据。
需要通用自定义消息时,可以使用 0xfe | type | request_id | payload 的封装,但序列化格式、长度校验和业务字段由应用负责。
| API | 用途 |
|---|---|
RaknetListener::bind(&SocketAddr) |
创建监听器 |
listener.listen().await |
启动监听,配置构建选项应在此之前完成 |
listener.accept().await? |
接收新会话 |
RaknetSocket::connect(&SocketAddr) |
用默认 RakNet 版本建立会话 |
connect_with_version(&SocketAddr, version) |
明确指定 RakNet 版本 |
send(&[u8], Reliability) |
发送借用的应用数据 |
send_with_order_channel(..., u8) |
指定排序/序列通道,默认通道为 0 |
recv().await? |
获取 Vec<u8> 消息 |
send_bytes(Bytes, Reliability) / recv_bytes()
|
使用不可变共享缓冲区 |
flush().await? |
等待发送队列清空、可靠帧获得传输确认 |
close().await? |
关闭连接 |
mtu() / raknet_version()
|
查看协商结果 |
send() 成功意味着发送路径已接纳并处理消息,不意味着对端业务已经执行。flush() 也仅涉及传输确认;要确认入库或操作成功,设计应用响应。示例中的回显就是一个应用响应。
发送队列满时,发送调用异步等待容量释放。可靠模式最多允许 64 个可靠帧在途,分片也占用窗口。普通突发队列的高水位为 256 KiB,计算包含帧开销。
持续发送时保持接收任务运行,避免两端都只发送、停止读取。不要为每条消息无限制创建等待中的任务,否则库内队列有界,应用内等待队列仍会无限增长。使用有界应用队列、并发上限及超时;超时/取消不能撤销已经排队或发出的消息。
| 对象 | 当前限制 |
|---|---|
大 ReliableOrdered 发送消息 |
最多 65,536 个分片,64 MiB 预算,包含每帧 128 B 开销 |
| 可靠接收重排 | 最多 65,536 个可靠索引 |
| 有序消息缓冲 | 最多 64 MiB 数据 |
| 分片重组 | 最多 1,024 组,每组最多 65,536 个分片,总计 64 MiB 预算含开销 |
| 停滞分片组 | 停滞 60 s 会关闭连接 |
大消息允许进入空的发送队列,但不绕过总预算。64 MiB 不是可发送有效载荷的精确上限,也不是进程总内存限制。应用数据、运行时和重组缓冲还会占用内存。超限或无效接收状态会关闭连接,避免静默丢弃已经确认的数据。
即使能发送巨大的消息,也应考虑共享窗口和同通道队头阻塞。文件传输更适合在应用层分块,并为实时消息保留独立队列及处理机会。
使用完连接后调用 close() 并处理结果。连接对象释放也会触发关闭通知。如果应用需要等可靠数据确认,可先调用 flush();仍须对网络断开和对端退出设置业务层超时。
报文格式、索引语义、分片限制和重传算法详见 RakNet 协议参考。
English · 简体中文 · GitHub · crates.io 1.4.0 · Reviewed / 核对:2026-10-12 / b909c93
- Overview
- Quick start
- Blocking calls and shared runtimes
- Public API index
- Five reliability modes
- RakNet wire format and recovery
- Message lifecycle and limits
- Bytes and explicit batching
- Send policy
- Recovery policy and tail probes
- Every configuration parameter
- Concurrency and socket tuning
- Errors, deadlines and cancellation
- Congestion and deployment boundaries
- Benchmark results
- Benchmark methodology
- Benchmark reproduction
- Minecraft Bedrock proxy
- Troubleshooting and development
- Release history and upgrading