Implementasi Protokol RakNet oleh Rust.
Raknet adalah protokol transport udp andal yang umumnya digunakan untuk komunikasi antara klien dan server game, dan digunakan oleh Minecraft Bedrock Edtion untuk komunikasi mendasar.
Protokol Raknet mendukung berbagai pilihan keandalan, dan memiliki kinerja transmisi yang lebih baik daripada TCP di lingkungan jaringan yang tidak stabil. Proyek ini merupakan implementasi protokol yang tidak lengkap dengan rekayasa balik.
Memerlukan >= dukungan runtime asinkron Tokio 1.x.
Referensi: http://www.jenkinssoftware.com/raknet/manual/index.html
Proyek ini tidak berafiliasi dengan Jenkins Software LLC atau RakNet.
# Cargo.toml
[ dependencies ]
rust-raknet = " * "
Dokumentasi : 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 ( ) ;
}
Gunakan Tcp untuk membandingkan dengan proyek ini. Atur tingkat kehilangan paket server menjadi 50%, klien terhubung ke server, dan server mengirimkan paket 800 byte setiap 30 md, total 100 kali. Klien menghitung waktu tunda setiap data yang diterima, dan menghitung waktu rata-rata penerimaan sebanyak 100 kali. Didapatkan hasil sebagai berikut.
Kode pengujian: https://github.com/b23r0/rust-raknet/blob/main/example/test_benchmark/src/main.rs
Hasil:
(12 Juni 2022)
Dalam lingkungan jaringan dengan tingkat kehilangan paket yang tinggi, proyek ini dapat mengurangi waktu tunda sekitar 50% dibandingkan dengan TCP.
Pilihan :
Terima kasih kepada orang-orang hebat ini.
b23r0 | kata benda |
Kontribusi apa pun dipersilakan! Jika Anda pernah ingin berkontribusi pada open source, dan memiliki tujuan besar, sekaranglah kesempatan Anda!
BTC : 1PahlawanYcNYMhjsq8RYCx1stSaRZnQd9B9Eq
ETH : 0x9999997B3deF7b69c09D7a9CA65E5242fb04a764