7 个版本

0.3.3 2021 年 11 月 1 日
0.3.2 2021 年 6 月 10 日
0.3.1 2021 年 2 月 18 日
0.2.0 2021 年 1 月 1 日
0.1.0 2020 年 3 月 17 日

#147异步

Download history 49618/week @ 2024-03-14 51005/week @ 2024-03-21 45624/week @ 2024-03-28 48253/week @ 2024-04-04 46413/week @ 2024-04-11 54799/week @ 2024-04-18 52458/week @ 2024-04-25 50044/week @ 2024-05-02 52989/week @ 2024-05-09 55068/week @ 2024-05-16 55727/week @ 2024-05-23 57540/week @ 2024-05-30 57494/week @ 2024-06-06 59851/week @ 2024-06-13 61373/week @ 2024-06-20 48989/week @ 2024-06-27

238,346 每月下载量
用于 410 个 Crates (8 直接)

无许可协议

30KB
517

async_io_stream

standard-readme compliant Build Status Docs crates.io

强化版的 IntoAsyncRead

此 crate 提供与 futures-util::IntoAsyncRead 相似的功能。它处理实现 StreamSink 的底层类型的 AsyncRead 和 AsyncWrite。该流需要是 TryStream,它遍历 I: AsRef<u8>std::io::Error。该 Sink 必须是 I: From< Vec<u8> >,并具有相同的错误。

主要其他区别在于,我们将始终尝试使用客户端提供的完整缓冲区。对于 poll_read,如果 Stream 上有更多项目可用,我们将尝试通过使用多个消息来填充整个缓冲区。提供矢量化 io 的实现,以最大限度地使用所有缓冲区,与默认实现相比,默认实现只会考虑第一个缓冲区。

对于 Sink,所有传入的数据都会被转换为 Sink 的一个项。

还实现了 AsyncBufRead,可用于在读取时避免数据复制。

在对底层 Stream 进行多次轮询时,我们会发送一个虚拟唤醒器,以防止底层 Stream 在我们没有返回 Poll::Pending 时尝试唤醒任务。也就是说,如果我们已经有了要返回的数据,就不能返回 Poll::Pending。如果底层 Stream 返回一个错误,我们将它缓冲到下一次轮询。

目录

安装

使用 cargo add: cargo add async_io_stream

使用 cargo yaml

dependencies:

   async_io_stream: ^0.3

使用 Cargo.toml

[dependencies]

    async_io_stream = "0.3"

升级

升级时,请查看 变更日志

依赖

该crate只有少数依赖。Cargo会自动为您处理依赖。

可选地,使用 map_pharos 功能,将 Observable 特性重新实现并转发到内部类型。这允许带外错误处理,因为 AsyncRead/AsyncWrite 只能返回 std::io::Error,编解码器通常会在返回任何错误时停止处理传输。这允许通知客户端非致命错误或事件。

当启用 tokio_io 功能时,提供 tokio 的 AsyncRead/AsyncWrite 特性的实现。

安全

此 crate 使用 #![ forbid(unsafe_code) ]。缓冲区没有最大尺寸保护。由于我们从未解释过通过的数据,该 crate 未进行模糊测试。

使用

基本示例

use
{
   async_io_stream :: { IoStream              } ,
   futures::io     :: { AsyncWrite, AsyncRead } ,
   futures         :: { Stream, Sink          } ,
   std             :: { io                    } ,
};

fn usage( transport: impl Stream< Item=Result<Vec<u8>, io::Error> > + Sink< Vec<u8>, Error=io::Error > + Unpin )

   -> impl AsyncRead + AsyncWrite + Unpin
{
	IoStream::new( transport )
}

API

API 文档可以在 docs.rs 上找到。

贡献

请查看 贡献指南

测试

行为准则

公民行为准则的第4点“不可接受的行为”中描述的任何行为都是不受欢迎的,并可能导致您被禁止。如果任何包括项目维护者和管理员的任何人未能尊重这些/您的限制,您有权指出。

许可

未经许可

依赖

~0.6–2MB
~35K SLoC