#udp #abstraction #byte #big-endian #send-receive #udp-socket #network-message

udp_netmsg

发送和接收 udp 数据报的低成本抽象。以简单的方式提供发送和接收由自定义结构体定义的数据报的能力

10 个版本

0.2.0 2020年10月25日
0.1.8 2019年5月25日

#13#big-endian

MIT 许可证

38KB
626

使用说明

如果您想轻松发送和接收 Udp 消息,那么这个 crate 正适合您。它允许您通过简单地创建一个结构体并实现一个特质来定义自己的 Net 消息。

重要提示

  • 此 crate 正在积极开发中,接口可能会随着更新而更改
  • 默认情况下,在数据报前面添加一个 ID 来标识消息类型。如有需要,可以轻松禁用。
  • 支持自动 ID 创建(方便使用)和手动头部 ID 创建(建议使用)。
  • 所有方法都是 &self,使其在多线程环境中易于使用。使用锁处理内部可变性。
  • 依赖于 Serde 进行序列化和反序列化。
  • 可以序列化和反序列化实现了 Serde 的序列化和反序列化特质的任何结构体。
  • 适用于 Serde 的任何格式都适用于此 crate。为了方便,JSON、Bincode 和 YAML 已在 crate 中实现(实现其他格式也很简单,请参阅示例 此处)。
  • 在第二个线程上运行一个监听器,该监听器用于监听传入的 Udp 消息。
  • 如果您需要接收或发送非常大的 udp 数据报,则不适合使用此 crate,因为它使用向量作为缓冲区。在我的轻量级测试中,发送/接收最大大小 udp 数据报(65k 字节)的速度比使用数组慢约 30%。

如果您对此 crate 有建议或疑问,请提交 问题

示例

    use udp_netmsg::prelude::*;
    use serde::{Serialize, Deserialize};
    use std::{thread, time};

    #[derive(Serialize, Deserialize)]
    struct UpdatePos {
        pub x: f32,
        pub y: f32,
        pub z: f32
    }

    fn main() {
        let net_msg = Builder::init().start::<JSON>().unwrap(); 
        let pos = UpdatePos{x: 15f32, y: 15f32, z: 15f32};
        net_msg.send(pos, String::from("127.0.0.1:39507")).unwrap();
    
        thread::sleep(time::Duration::from_millis(100));

        net_msg.get::<UpdatePos>().unwrap();
    }

更多示例请参阅 此处

依赖关系

~2.4–3.5MB
~70K SLoC