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 次下载

MIT 协议

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