rust raknet
v0.12.0
Rust 实现的 RakNet 协议。
Raknet 是一种可靠的 udp 传输协议,通常用于游戏客户端和服务器之间的通信,并被 Minecraft 基岩版用于底层通信。
Raknet协议支持多种可靠性选项,在不稳定的网络环境下比TCP具有更好的传输性能。该项目是通过逆向工程对该协议进行不完整的实现。
需要 >= Tokio 1.x异步运行时支持。
参考:http://www.jenkinssoftware.com/raknet/manual/index.html
该项目不隶属于 Jenkins Software LLC 或 RakNet。
# Cargo.toml
[ dependencies ]
rust-raknet = " * "
文档:https://docs.rs/rust-raknet/latest/rust_raknet/
//server
async fn serve ( ) {
let mut listener = RaknetListener :: bind ( "127.0.0.1:19132" . parse ( ) . unwrap ( ) ) . await . unwrap ( ) ;
listener . listen ( ) . await ;
loop {
let socket = listener . accept ( ) . await . unwrap ( ) ;
let buf = socket . recv ( ) . await . unwrap ( ) ;
if buf [ 0 ] == 0xfe {
//do something
}
}
listener . close ( ) . await . unwrap ( ) ;
}
//client
async fn connect ( ) {
let socket = RaknetSocket :: connect ( "127.0.0.1:19132" . parse ( ) . unwrap ( ) ) . await . unwrap ( ) ;
socket . send ( & [ 0xfe ] , Reliability :: ReliableOrdered ) . await . unwrap ( ) ;
let buf = socket . recv ( ) . await . unwrap ( ) ;
if buf [ 0 ] == 0xfe {
//do something
}
socket . close ( ) . await . unwrap ( ) ;
}
使用Tcp与本项目进行比较。设置服务器丢包率为50%,客户端连接服务器,服务器每30ms发送一个800字节的数据包,共发送100次。客户端统计每次接收数据的延迟时间,并计算接收100次的平均时间。得到以下结果。
测试代码:https://github.com/b23r0/rust-raknet/blob/main/example/test_benchmark/src/main.rs
结果:
(2022 年 6 月 12 日)
在丢包率较高的网络环境下,该项目相比TCP可减少50%左右的延迟时间。
选项 :
感谢这些优秀的人。
b23r0 | 名词 |
欢迎任何形式的贡献!如果您曾经想为开源做出贡献,并且想为一项伟大的事业做出贡献,那么现在就是您的机会!
比特币:1HeroYcNYMhjsq8RYCx1stSaRZnQd9B9Eq
以太坊:0x9999997B3deF7b69c09D7a9CA65E5242fb04a764