1个不稳定版本

0.2.0 2022年7月10日

#9#unordered

MIT/Apache

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