rust-raknet Build Status ChatOnDiscord Crate Crate

RakNet Protocol implementation by Rust.

Raknet is a reliable udp transport protocol that is generally used for communication between game clients and servers, and is used by Minecraft Bedrock Edtion for underlying communication.

Raknet protocol supports multiple reliability, and has better transmission performance than TCP in unstable network environments. This project is an incomplete implementation of the protocol.

Reference : http://www.jenkinssoftware.com/raknet/manual/index.html

This project is not affiliated with Jenkins Software LLC nor RakNet.

Features

Get Started

```toml

Cargo.toml

[dependencies] rust-raknet = "*" ```

Documentation : https://docs.rs/rust-raknet/latest/rust_raknet/

Reliability

Example

```rs //server

async fn serve(){ let mut listener = RaknetListener::bind("127.0.0.1:19132".parse().unwrap()).await.unwrap(); listener.listen().await; loop{ let mut socket = listener.accept().await.unwrap(); let buf = socket.recv().await.unwrap(); if buf[0] == 0xfe{ //do something } } }

```

```rs //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 } } ```

Benchmark

Use Tcp to compare with this project. Set the server packet loss rate to 50%, the client connects to the server, and the server sends an 800-byte packet every 30ms, a total of 100 times. The client counts the delay time of each received data, and calculates the average time of receiving 100 times. The following results are obtained.

Test code: https://github.com/b23r0/rust-raknet/blob/main/example/test_benchmark/src/main.rs

Result:

image

(June 12, 2022)

In the network environment with high packet loss rate, this project can reduce the delay time by about 50% compared with TCP.

Contribution

Options :

This project exists thanks to all the people who contribute.