HelloGitHub icon indicating copy to clipboard operation
HelloGitHub copied to clipboard

【开源自荐】Rust实现高性能UDP可靠传输协议

Open alittlekami opened this issue 2 years ago • 0 comments

推荐项目

  • 项目地址:https://github.com/b23r0/rust-raknet/

  • 类别:Rust

  • 项目标题:Rust实现高性能UDP可靠传输协议

  • 项目描述:Raknet是一个成熟的UDP可靠传输协议,知名游戏Minecraft采用该协议作为游戏客户端和服务器通信协议。本项目通过逆向工程和参考老版facebook的c++实现,使用Rust重新实现该协议,同时用异步IO替代老版c++协议的多线程模型,还解决了老版本c++实现存在的大量线程和内存泄漏问题。项目目前在生产环境中同时支撑数千玩家在线游戏,在小包高频的网络游戏场景下,遇到丢包率较高的情况,相比TCP能降低50%的平均网络延迟。项目同时兼容了Minecraft最新版本,可用于Minecraft中间件开发的底层协议库使用。

  • 亮点:

  • 异步
  • 快速重传&选择重传&无延迟ACK
  • 跨平台支持(Linux&Windows&OSX&FreeBSD)
  • 兼容Minecraft
  • 示例代码:
//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
        }
    }
}

//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
    }
}
  • 后续更新计划:
  • 持续优化性能
  • 为Python/Nodejs等提供绑定库
  • 支持更多参数选项
  • 支持纯ARQ调用
  • 流量控制

alittlekami avatar Jun 13 '22 03:06 alittlekami