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