1 个不稳定版本
0.1.0 | 2021 年 2 月 18 日 |
---|
#153 在 #udp
25KB
493 行
tokio-udp-framed
这个项目最初是从 tokio-util 的 UdpFramed
的副本开始的,进行了一些修改,提供了一种不同的 API
- 所有
UdpFramed
类型都接受一个Borrow<UdpSocket>
,因此您可以传递一个Arc<UdpSocket>
或&UdpSocket
- 存在
UpdFramedRecv
和UdpFramedSend
类型,用于在Sink/
Stream
中专门进行send
和recv
- 由于
Borrow<UdpSocket>
,您不能再使用get_mut
了
主要好处可以通过一个示例轻松解释
let a_soc = Arc::new(UdpSocket::bind("127.0.0.1:0").await?);
let b_soc = a_soc.clone();
let a_addr = a_soc.local_addr()?;
let b_addr = b_soc.local_addr()?;
let mut a = UdpFramed::new(a_soc, ByteCodec);
let mut b = UdpFramed::new(b_soc, LinesCodec::new());
let msg = b"1\r\n2\r\n3\r\n".to_vec();
a.send((&msg, b_addr)).await?;
let msg = b"4\r\n5\r\n6\r\n".to_vec();
a.send((&msg, b_addr)).await?;
assert_eq!(b.next().await.unwrap().unwrap(), ("1".to_string(), a_addr));
assert_eq!(b.next().await.unwrap().unwrap(), ("2".to_string(), a_addr));
assert_eq!(b.next().await.unwrap().unwrap(), ("3".to_string(), a_addr));
assert_eq!(b.next().await.unwrap().unwrap(), ("4".to_string(), a_addr));
assert_eq!(b.next().await.unwrap().unwrap(), ("5".to_string(), a_addr));
assert_eq!(b.next().await.unwrap().unwrap(), ("6".to_string(), a_addr));
依赖关系
~2.7–4MB
~62K SLoC