2017-08-14 62 views
0

我有一个Stream的项目(u32, Bytes)其中整数是在范围内的索引0..n我想将此流拆分为n流,基本上过滤由整数。拆分期货::根据流项目的属性流分成多个流

我考虑了几种可能性,其中包括

  • 创建n流的每一个偷窥在底层的流来确定下一个项目是为它
  • 推动项目n的一个水池,当他们到达,然后再次将接收器的另一侧用作流。 (这似乎与 Forwarding from a futures::Stream to a futures::Sink有关。)。

我觉得这两种可能性都没有说服力。第一个似乎造成不必要的开销,第二个不够优雅(如果它甚至有效,我不确定)。

什么是分流的好方法?

回答

0

您可以使用channels来表示索引特定的流。你必须产生一个从原始流中拉出的Task并具有Sender s的地图。

1

在一个点上,我有一个类似的要求,并为Stream写了group_by运算符。

我还没有发布到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现在将(u32, Stream<Item=Bytes))Stream