Реализация протокола 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 | существительное |
Вклад любого рода приветствуется! Если вы когда-либо хотели внести свой вклад в открытый исходный код и в великое дело, то теперь у вас есть шанс!
BTC: 1HeroYcNYMhjsq8RYCx1stSaRZnQd9B9Eq
ETH: 0x9999997B3deF7b69c09D7a9CA65E5242fb04a764