10 个版本
0.2.0 | 2020年10月25日 |
---|---|
0.1.8 | 2019年5月25日 |
#13 在 #big-endian
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