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
130KB
1.5K SLoC
safla-net
这是一个安全的Rust网络通信库。
它是safina
的一部分,一个安全的异步运行时。
特性
禁止(unsafe_code)
- 仅依赖于
std
- 良好的测试覆盖率(91%)
- 与
safina-executor
或任何异步执行器兼容
限制
- 尚未提供
AsyncRead
或AsyncWrite
实现。 - 未优化。使用轮询。这比其他异步网络库有更高的延迟和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
的方法:peek
、read_vectored
、flush
和write_vectored
。 - 支持Windows
- 添加了
- v0.1.0 - 首次发布版本
待办事项
- 添加其他crate,包括适配流行的异步io特性,如safina-net-tokio、safina-net-futures等。
许可证:Apache-2.0
依赖项
~76KB