5个版本
0.2.2 | 2023年11月27日 |
---|---|
0.2.1 | 2023年11月23日 |
0.2.0 | 2023年11月23日 |
0.1.1 | 2023年8月24日 |
0.1.0 | 2023年7月22日 |
#1210 在 网络编程
每月 27 次下载
18KB
295 行
UDP Polygon
一个有偏见的UDP监听器和发布者
重大变更
从0.1.1到0.2.0:之前,版本低于0.1.1会将接收到的数据报字节转换为字符串。但从版本0.2.0开始,接收事件现在直接传递字节。此外,发送数据的预期格式现在要求它被封装在Vec中以实现兼容性。此变更实施是因为发现以前的实现过于限制。
需求
- 消费者需要tokio
- 生产者不需要额外的东西
- 启用计时器标志的生产者需要tokio
配置
有许多选项可以配置您的UDP客户端和服务器
- TOML文件
[[bind_addresses]]
ip = "127.0.0.1"
port = 5061
[destination_address]
ip = "127.0.0.1"
port = 5060
- 参数
let config = Config::from_arguments(
vec![(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 5061)],
Some((IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 5060)),
);
- 环境变量
export BIND_ADDRS=127.0.0.1
export BIND_PORT=5061
export DEST_ADDRS=127.0.0.1
export DEST_PORT=5060
let config = Config::from_env();
发送
polygon.send("Hello World".as_bytes().to_vec());
接收
let rx = polygon.receive();
loop {
let maybe = rx.try_recv();
if let Ok(data) = maybe {
println!("receiving... {data:?}");
}
}
基本示例
- send_fa(通过传递参数的示例)
- receive_fa(通过传递参数的示例)
- send_toml(使用TOML文件的示例)
- receive_toml(使用TOML文件的示例)
- send_receive(发送和接收)
计时器标志
以特定延迟重新传输消息
polygon.send_with_timer(
"Hello World".as_bytes().to_vec(),
Timers {
delays: vec![500, 600, 1000, 1500],
},
);
可以在任何给定时间暂停重传,甚至在发送消息中途,从而有效地取消重传
let mut polygon = Polygon::configure(config);
let pause = Arc::clone(&polygon.pause_timer_send);
*pause.lock().unwrap() = true;
或
let mut polygon = Polygon::configure(config);
polygon.pause_timer_send()
polygon.resume_timer_send()
这将使send_with_timer表现得像正常发送(但它仍然需要tokio)
计时器示例
- send_receive_with_timer
依赖项
~3–9.5MB
~83K SLoC