9个版本

0.1.8 2022年4月1日
0.1.7 2022年3月16日
0.1.5 2022年2月25日
0.1.3 2021年3月26日
0.1.1 2020年12月31日

#1614 in 异步


用于 safina

Apache-2.0

130KB
1.5K SLoC

safla-net

crates.io version license: Apache 2.0 unsafe forbidden pipeline status

这是一个安全的Rust网络通信库。

它是safina的一部分,一个安全的异步运行时。

特性

  • 禁止(unsafe_code)
  • 仅依赖于 std
  • 良好的测试覆盖率(91%)
  • safina-executor 或任何异步执行器兼容

限制

  • 尚未提供 AsyncReadAsyncWrite 实现。
  • 未优化。使用轮询。这比其他异步网络库有更高的延迟和CPU负载。
  • TCP连接使用阻塞线程。并发连接操作受执行器阻塞线程池大小限制。

示例

let bind_addr =
    std::net::SocketAddr::from(([127, 0, 0, 1], 0));
let mut listener =
    safina_net::TcpListener::bind(&bind_addr)
    .unwrap();
let addr = listener.inner().local_addr().unwrap();
println!("{}", &addr);

let executor = safina_executor::Executor::default();
executor.spawn(async move {
    let mut tcp_stream =
        safina_net::TcpStream::connect(addr)
        .await
        .unwrap();
    let mut buf = String::new();
    tcp_stream.read_to_string(&mut buf).await.unwrap();
    println!("read {:?}", buf);
});

let (mut tcp_stream, _addr)
    = listener.accept().await.unwrap();
tcp_stream.write_all(b"response").await.unwrap();
println!("wrote response");

完整示例,请参阅tests/中的集成测试。

替代方案

  • async-net
    • 依赖项包含大量的 unsafe
  • async-io
    • 完全充满 unsafe
  • tokio
    • 非常受欢迎
    • 快速
    • 内部极其复杂
    • 完全充满 unsafe
  • tcp-stream
    • 阻塞异步执行器线程
    • 包含少量 unsafe 代码

变更日志

变更日志
  • v0.1.8 - 更新文档。
  • v0.1.7 - 使用 safina-executor v0.3.1。
  • v0.1.6 - 使用 safina-executor v0.3。
  • V0.1.5 - 更新文档。
  • v0.1.4 - 使用 safina-executor v0.2。
  • v0.1.3 - 增加测试覆盖率
  • v0.1.2
    • 增加测试覆盖率
    • 处理 macOS 上的 EPROTOTYPE 错误。
  • v0.1.1
    • 添加了 TcpStream 的方法:peekread_vectoredflushwrite_vectored
    • 支持Windows
  • v0.1.0 - 首次发布版本

待办事项

  • 添加其他crate,包括适配流行的异步io特性,如safina-net-tokio、safina-net-futures等。

许可证:Apache-2.0

依赖项

~76KB