5个版本
0.3.3 | 2024年4月28日 |
---|---|
0.3.3-beta.1 | 2024年3月17日 |
0.3.2 | 2024年1月27日 |
0.3.1 | 2023年9月18日 |
0.3.0 | 2023年8月21日 |
#982 in 网络编程
每月 40 次下载
265KB
4.5K SLoC
rak-rs
纯Rust编写的完全功能的RakNet实现,异步驱动。
入门
RakNet (rak-rs) 在 crates.io 上可用,要使用它,请在您的 Cargo.toml
中添加以下内容
[dependencies]
rak-rs = "0.3.3"
功能
此RakNet实现包含3个主要功能,async_std
、async_tokio
和 mcpe
。但是,默认情况下,仅启用 async_std
,并且 mcpe
需要您修改您的 Cargo.toml
。
如果您希望使用这些功能,请像下面这样将它们添加到您的 Cargo.toml
中
[dependencies]
rak-rs = { version = "0.3.3", default-features = false, features = [ "async_tokio", "mcpe" ] }
rak-rs 还提供了以下模块
rak_rs::client
- RakNet的客户端实现,允许您连接到RakNet服务器。rak_rs::connection
- Raknet对等的裸骨实现,主要用于类型。rak_rs::error
- 一个模块,其中包含客户端和服务器都可以响应的错误。rak_rs::protocol
- RakNet的低级实现,负责编码和解码数据包。rak_rs::server
- RakNet的基础服务器实现。rak_rs::util
- 在rak-rs
中使用的通用工具。
客户端
client
模块提供了一种通过代码与RakNet服务器交互的方式。
示例
use rak_rs::client::{Client, DEFAULT_MTU};
use std::net::ToSocketAddrs;
#[async_std::main]
async fn main() {
let version: u8 = 10;
let mut client = Client::new(version, DEFAULT_MTU);
client.connect("my_server.net:19132").await.unwrap();
// receive packets
loop {
let packet = client.recv().await.unwrap();
println!("Received a packet! {:?}", packet);
client.send_ord(vec![254, 0, 1, 1], Some(1));
}
}
服务器
纯Rust编写的RakNet服务器实现。
示例
use rakrs::connection::Connection;
use rakrs::Listener;
use rakrs::
#[async_std::main]
async fn main() {
let mut server = Listener::bind("0.0.0.0:19132").await.unwrap();
server.start().await.unwrap();
loop {
let conn = server.accept().await;
async_std::task::spawn(handle(conn.unwrap()));
}
}
async fn handle(mut conn: Connection) {
loop {
// keeping the connection alive
if conn.is_closed() {
println!("Connection closed!");
break;
}
if let Ok(pk) = conn.recv().await {
println!("Got a connection packet {:?} ", pk);
}
}
}
依赖项
~4–16MB
~201K SLoC