Implementação do protocolo RakNet por Rust.
Raknet é um protocolo de transporte udp confiável que geralmente é usado para comunicação entre clientes e servidores de jogos e é usado pelo Minecraft Bedrock Edtion para comunicação subjacente.
O protocolo Raknet suporta várias opções de confiabilidade e tem melhor desempenho de transmissão que o TCP em ambientes de rede instáveis. Este projeto é uma implementação incompleta do protocolo por engenharia reversa.
Requer suporte de tempo de execução assíncrono >= Tokio 1.x.
Referência: http://www.jenkinssoftware.com/raknet/manual/index.html
Este projeto não é afiliado à Jenkins Software LLC nem à RakNet.
# Cargo.toml
[ dependencies ]
rust-raknet = " * "
Documentação: 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 ( ) ;
}
Use TCP para comparar com este projeto. Defina a taxa de perda de pacotes do servidor para 50%, o cliente se conecta ao servidor e o servidor envia um pacote de 800 bytes a cada 30 ms, um total de 100 vezes. O cliente conta o tempo de atraso de cada dado recebido e calcula o tempo médio de recebimento 100 vezes. Os seguintes resultados são obtidos.
Código de teste: https://github.com/b23r0/rust-raknet/blob/main/example/test_benchmark/src/main.rs
Resultado:
(12 de junho de 2022)
No ambiente de rede com alta taxa de perda de pacotes, este projeto pode reduzir o tempo de atraso em cerca de 50% em comparação com o TCP.
Opções:
Obrigado a essas pessoas maravilhosas.
b23r0 | substantivo cinco |
Contribuições de qualquer tipo são bem-vindas! Se você sempre quis contribuir com o código aberto e com uma grande causa, agora é sua chance!
BTC: 1HeroYcNYMhjsq8RYCx1stSaRZnQd9B9Eq
ETH: 0x9999997B3deF7b69c09D7a9CA65E5242fb04a764