1个不稳定版本
0.2.0 | 2022年7月10日 |
---|
#9 在 #unordered
29KB
659 代码行
eznet
一个简单的网络库
ENet/laminar风格,基于Quinn (QUIC),简单易用,具有可配置的可靠性和排序的异步网络库。
特性
-
数据包加密(但并不真正安全 TODO:1)
-
可靠的有序、可靠的顺序、可靠的未排序、不可靠的顺序和不可靠的未排序数据包
-
易于使用
-
异步/await
示例
// examples/simple-server.rs
let bind_addr = SocketAddrV4::new(Ipv4Addr::LOCALHOST, 13331);
let mut listener = Listener::bind(bind_addr.into());
while let Some(socket) = listener.next().await {
socket
.send(Packet::ordered_from(
format!("Hello {}!", socket.remote()).as_bytes(),
None,
))
.await
.unwrap();
}
// examples/simple-client.rs
let server_addr = SocketAddrV4::new(Ipv4Addr::LOCALHOST, 13331);
let mut socket = Socket::connect(server_addr.into()).await.unwrap();
println!(
"{}",
std::str::from_utf8(&socket.recv().await.unwrap().bytes[..]).unwrap()
);
TODO
-
目前加密不能防止中间人攻击。仅使用自签名的服务器端证书,客户端接受所有内容。添加证书、私钥、服务器名称和DNS。(1)
-
打开套接字魔数字节测试以过滤掉随机扫描器和“意外”连接。(2)
-
关闭时断开连接消息。(3)
-
可配置缓冲区容量。(4)
-
如果数据包发送速度略快于每毫秒一次,则实际上不会发送任何数据包,所有数据包都将被缓冲。(5)
-
实际上丢弃“旧”的顺序数据包(6)
许可证
根据MIT许可证或Apache-2.0许可证进行许可。
我不是律师。
依赖项
~15–26MB
~480K SLoC