Skip to content

Quick Start

b23r0 edited this page Oct 12, 2026 · 5 revisions

English · 简体中文

快速开始

最低要求:Rust 1.85、Tokio 1.38。使用 Rust 2024 edition。请在任务专属副本、容器或虚拟机中创建示例和运行服务,使用独立 Cargo 缓存和构建目录;本地服务放在私有网络命名空间中。

1. 添加依赖

新建二进制项目,将依赖加入 Cargo.toml:

[package]
name = "raknet-echo"
version = "0.1.0"
edition = "2024"

[dependencies]
rust-raknet = "1.4.0"
tokio = { version = "1.38", features = ["full"] }

示例对应已发布的 1.4.0。Rust 1.85 是声明的最低版本,tokio = "1.38" 是依赖范围;新解析的所有依赖不一定都支持旧 Rust,使用最低版本时应保留兼容锁文件。发送策略、恢复策略和同步调用均可选。

2. 回显服务端

保存为 src/bin/server.rs:

use rust_raknet::{RaknetListener, Reliability, error::Result};

#[tokio::main]
async fn main() -> Result<()> {
    let address = "127.0.0.1:19132".parse().unwrap();
    let mut listener = RaknetListener::bind(&address).await?;
    listener.listen().await;

    loop {
        let socket = listener.accept().await?;
        tokio::spawn(async move {
            while let Ok(message) = socket.recv().await {
                if let Err(error) = socket
                    .send(&message, Reliability::ReliableOrdered)
                    .await
                {
                    eprintln!("Echo failed: {error}");
                    break;
                }
            }
            let _ = socket.close().await;
        });
    }
}

bind() 分配 UDP socket,listen() 启动监听,accept() 返回独立会话。每个会话启动一个异步任务,监听循环才能继续接收其他连接。

3. 客户端

保存为 src/bin/client.rs:

use rust_raknet::{RaknetSocket, Reliability, error::Result};

#[tokio::main]
async fn main() -> Result<()> {
    let address = "127.0.0.1:19132".parse().unwrap();
    let socket = RaknetSocket::connect(&address).await?;
    socket.send(&[0xfe, 1, 2, 3], Reliability::ReliableOrdered).await?;
    let reply = socket.recv().await?;
    println!("Echo: {reply:?}");
    socket.close().await
}

在同一个隔离网络内的两个终端分别运行:

cargo run --bin server
cargo run --bin client

客户端应输出 Echo: [254, 1, 2, 3]。两端需要共享网络命名空间;各自容器中的 127.0.0.1 通常不指向另一容器。

4. 现有示例

回显示例可直接使用上面的 server.rs / client.rs。仓库还提供 concurrency、concurrency_benchmark、sharded_echo、interop 和 bedrock_probe 等示例。先核对 examples 目录 的参数与源代码。普通 .rs 示例使用 --example;examples/proxy、examples/bedrock_ping、examples/test_benchmark 是独立 Cargo 项目,使用 --manifest-path。

下一步:选择可靠模式 · 处理消息和背压

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

Clone this wiki locally