Skip to content

Configuration and Concurrency

b23r0 edited this page Oct 12, 2026 · 6 revisions

English · 简体中文

配置与高并发

优先让应用保持读取、限制等待中的工作量,再测试 MTU、接收分片与批量策略。默认设置没有同时启用所有吞吐选项。

MTU

let mut listener = RaknetListener::bind_with_maximum_mtu(&address, 1428).await?;
listener.listen().await;
let socket = RaknetSocket::connect_with_version_and_mtu(&address, 11, 1428).await?;
println!("Negotiated MTU: {}", socket.mtu());

此片段用于分别配置服务端/客户端,类型导入见快速开始。默认名义 MTU 1,400 B,允许 61–1,492 B,离线协商选择双方上限中较小值。名义 MTU 预留 IPv4/UDP 的 28 B 头部,不是 UDP 有效载荷大小,也不是路径 MTU 发现。IPv6、VPN 和隧道还需要考虑额外头部。

接收 socket 分片(Linux)

use std::num::NonZeroUsize;
use rust_raknet::{RaknetListener, error::Result};

async fn make_listener() -> Result<RaknetListener> {
    let address = "127.0.0.1:19132".parse().unwrap();
    let mut listener = RaknetListener::bind_with_socket_shards(
        &address, NonZeroUsize::new(4).unwrap(),
    ).await?.with_accept_backlog(NonZeroUsize::new(512).unwrap());
    listener.listen().await;
    Ok(listener)
}

Linux SO_REUSEPORT 将不同对端的流量分配到多个接收 socket。分片共享 GUID、MOTD 和待接收连接队列;整个监听器一起关闭。数量 1–64,建立后保持不变。默认一个分片,运行时应提供足够的工作线程,例如四个分片配合四个 Tokio worker。

分片不会让一个热点连接自动占满所有核心,流量分配也不保证完全均匀。前端接收优化后,上游连接或应用处理仍可能是瓶颈。

缓冲区与 backlog

bind() 申请 2 MiB UDP 接收缓冲,操作系统可以限制实际值。bind_with_receive_buffer_size(&address, NonZeroUsize) 可申请其他值;from_std() 保留已有标准 UDP socket 的缓冲设置。这些 API 只设置当前 socket,不修改系统上限。

默认 accept backlog 为 128。在 listen() 前调用 with_accept_backlog() 设置队列长度;满时离线握手等待重试。它不是最大活跃会话数。应用若需要人数上限,应自己计数并管理会话。

两个默认关闭的选项

选项 行为 评估重点
with_receive_batching(true)(Linux) 每次最多接收 16 个已经就绪的数据报,不等待凑满 繁忙吞吐与稀疏延迟分别测
with_idle_maintenance(true) 新会话空闲 500 ms 且队列为空后暂停周期维护,有新任务恢复 空闲 CPU、恢复延迟、忙碌负载

它们是返回 Self 的构建方法,应该在 listen() 前链式使用。现有客户端可用 socket.set_idle_maintenance(true) 切换空闲维护。当前 README benchmark 没有启用这两个选项。

可选发送策略

发送策略说明介绍在途帧/字节限制、可靠与不可靠队列预算及按字节调度。该功能已包含在1.1.0,需要显式启用;默认构建保留原有路径。请根据两种接口的实测结果评估吞吐和较慢消息延迟。

客户端、accept 后连接和代理两端的设置位置,以及调参取舍,见发送策略。

应用调度

  1. 让 accept 循环快速交出会话,单连接处理放入独立任务。
  2. 双向代理并发接收与发送;一个方向的背压不应阻塞另一方向。
  3. 控制单次连续处理量,让其他连接获得调度机会;示例代理每处理 8 条消息主动让出一次任务。
  4. 给业务队列、连接建立和关闭设置预算。不要用无限任务数掩盖过载。
  5. 测试连接分布、空闲比例与慢接收端,不只增加活跃回显连接数。

发送与接收限制 · 高并发评估 · 监听器源码

恢复策略 · 完整配置参数参考

同步 API · API 索引 · 错误与超时

Clone this wiki locally