تنفيذ بروتوكول 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 يونيو 2022)
في بيئة الشبكة ذات معدل فقدان الحزمة المرتفع، يمكن لهذا المشروع تقليل وقت التأخير بحوالي 50% مقارنة بـ TCP.
خيارات :
شكرا لهؤلاء الناس الرائعين.
b23r0 | nonfve |
المساهمات من أي نوع هي موضع ترحيب! إذا كنت ترغب في المساهمة في المصادر المفتوحة وقضية عظيمة، فالآن هي فرصتك!
البيتكوين: 1HeroYcNYMhjsq8RYCx1stSaRZnQd9B9Eq
إيثر: 0x9999997B3deF7b69c09D7a9CA65E5242fb04a764