การใช้งานโปรโตคอล RakNet โดย Rust
Raknet เป็นโปรโตคอลการขนส่ง udp ที่เชื่อถือได้ ซึ่งโดยทั่วไปใช้สำหรับการสื่อสารระหว่างไคลเอนต์เกมและเซิร์ฟเวอร์ และถูกใช้โดย Minecraft Bedrock Edtion สำหรับการสื่อสารพื้นฐาน
โปรโตคอล 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% ไคลเอนต์เชื่อมต่อกับเซิร์ฟเวอร์ และเซิร์ฟเวอร์ส่งแพ็กเก็ตขนาด 800 ไบต์ทุกๆ 30 มิลลิวินาที รวมเป็น 100 ครั้ง ลูกค้านับเวลาหน่วงของข้อมูลที่ได้รับแต่ละรายการ และคำนวณเวลาเฉลี่ยในการรับ 100 ครั้ง ผลลัพธ์ต่อไปนี้จะได้รับ
รหัสทดสอบ: https://github.com/b23r0/rust-raknet/blob/main/example/test_benchmark/src/main.rs
ผลลัพธ์:
(12 มิถุนายน 2565)
ในสภาพแวดล้อมเครือข่ายที่มีอัตราการสูญเสียแพ็กเก็ตสูง โปรเจ็กต์นี้สามารถลดเวลาหน่วงได้ประมาณ 50% เมื่อเทียบกับ TCP
ตัวเลือก :
ขอบคุณคนที่ยอดเยี่ยมเหล่านี้
b23r0 | คำนาม |
ยินดีมีส่วนร่วมทุกรูปแบบ! หากคุณเคยต้องการมีส่วนร่วมในโอเพ่นซอร์สและมีเป้าหมายที่ยิ่งใหญ่ ตอนนี้เป็นโอกาสของคุณแล้ว!
BTC : 1HeroYcNYMhjsq8RYCx1stSaRZnQd9B9Eq
ผลประโยชน์ทับซ้อน : 0x9999997B3deF7b69c09D7a9CA65E5242fb04a764