
5.4
パイプ処理パターン
139
デスティネーションストリームにパイプされるデータはランダムに入り交じってしまうことに注意が
必要です。(上の例のような)オブジェクトストリームでは許容できますが、バイナリストリームでは多
くの場合、問題になります。
しかし、順番にストリームをマージできるバージョンがあります。ソースストリームを次々と消費し、
前のストリームが終了すると、次のストリームがチャンクをエミットします(すべてのソースの出力を
次々と連結していくことになります)。
npm
にはこのような状況に対処できるパッケージが用意されて
います。たとえば
multistream
(
https://npmjs.org/package/multistream
)がそのひとつです。
5.4.4
マルチプレクシングとデマルチプレクシング
マージストリームパターンにはバリエーションがあります。複数のストリームを一緒にするだけでな
く、共有
チャネルを使って複数のストリームのデータを供給するものです(図5-9)。各ソースストリー
ムは共有チャネルの中で論理的に分かれているため、これまでのものとは概念的には異なることになり
ます。これにより、共有チャネルの終端にデータが達したときにストリームを再度分割できます。
チャネル
A
mux
共有チャネル
demux
チャネル
B
チャネル
A
チャネル
B
図5-9 マルチプレクシングとデマルチプレクシング
1
章でも説明しましたが、複数ストリーム(一般には「チャネル」)を一緒に結合してひとつのストリー
ム上を流す