Stream-Adventure HTML-Stream 中对 Trumpet 的理解

A programmer had a problem. He thought "I know, I'll create an API". Now everybody has a problem.

玩了 John Resig 提到的 Stream-Adventure ,在 HTML-Stream 关卡中,根据题目提示写出了代码

1
2
3
4
5
6
7
8
9
10
11
12
var through = require('through')
, trumpet = require('trumpet')

function upper(buf) {
this.queue(buf.toString().toUpperCase())
}

var tr = trumpet()
process.stdin.pipe(tr).pipe(process.stdout)

var stream = tr.select('.loud').createStream()
stream.pipe(through(upper)).pipe(stream)

虽然写出来了,但其实我还是混淆着 tr 和 steam 流。

最后在 nodeschool 的讨论中得到了比较好启发。

试着整理一下自己的表述:

这里很明显是有两条流 tr 和 steam ,之前混淆他们的关系,所以一直不能理解。

tr 是主流,输入流入 tr 最后流到输出

main flow

stream 流是在 tr 内部发生的,tr 会尝试找到 loud 类的内容,然后创建流 stream ,流向 through 改变大小写,最后流回 stream 覆盖原来的内容。

stream flow

您还在局域网。 ——来自隔墙相望的评论