stream - 根据流项的属性将 futures::Stream 拆分为多个流

标签 stream rust

我有一个 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/

相关文章:

c++ - 输出到文件或 cout 的通用流——C++

java - 通过代理java下载文件

javascript - Streamjs和linqjs有什么关系

python - 将流分成具有相等计数的箱

import - 如何在另一个 bin 中重用主 bin 中的代码?

rust - "the immutable borrow prevents mutable borrows"当使用 rust-sdl2 抽取事件时

sockets - 如何使用 C 中的套接字读取流的 TCP 数据包?

multithreading - 在 Rust 中创建两个对结构线程安全的可变引用

rust - Rust 是否允许用 lib/mod.rs 代替 lib.rs?

rust - 如果在我插入的数据之后声明引用,则无法在 HashMap 中插入引用