我有一个 Stream
项目 (u32, Bytes)
其中整数是 0..n
范围内的索引我会喜欢将此流拆分为 n
流,基本上按整数过滤。
我考虑了几种可能性,包括
- 创建
n
流,每个流都查看底层流以确定下一个项目是否适合它 - 在项目到达时将项目推送到
n
接收器之一,然后再次将接收器的另一侧用作流。 (这似乎与 Forwarding from a futures::Stream to a futures::Sink .).
我觉得这两种可能性都没有说服力。第一个似乎会产生不必要的开销,而第二个则不够优雅(我不确定它是否有效)。
什么是拆分流的好方法?
最佳答案
有一次我有类似的需求并写了一个 group_by
Stream
的运算符.
我还没有将它发布到 crates.io,因为我真的觉得它还没有准备好使用,但请随时查看 https://github.com/Lukazoid/lz_stream_tools 上的代码。或尝试自己使用它。
将以下内容添加到您的 cargo.toml:
[dependencies]
lz_stream_tools = { git = "https://github.com/Lukazoid/lz_stream_tools" }
和extern crate lz_stream_tools;
到你的 bin.rs/lib.rs。
然后从您的代码中您可以像这样使用它:
use lz_stream_tools::StreamTools;
let groups = some_stream.group_by(|x| x.0);
groups
现在将是 Stream
的 (u32, Stream<Item=Bytes))
.
关于stream - 根据流项的属性将 futures::Stream 拆分为多个流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45684038/