最简单的nodejs回应服务器

我正在熟悉nodejs中的stream,我有一个问题:

我有我认为最简单的nodejs“回显服务器”,即一个简单的pipe道回到响应stream,无论它通过请求stream接收的服务器。 它的工作,但有一个警告。 客户端仅在closures提交stream后才接收数据。 这里是服务器代码:

var http = require('http') var server = http.createServer(function (req, res) { req.pipe(res); }); server.listen(8000); 

这是我如何testing它:

做下面的工作就好了

 term1> node server.js& term2> echo 'hello world!'|curl --no-buffer --data-binary @- 'http://localhost:8000' hello world! 

但是,它只能工作,因为echo完成后closures其输出文件描述符,也就是说,服务器在客户端完成发送之后才会写任何东西:

 term2> term2> yes|curl --no-buffer --data-binary @- 'http://localhost:8000' 

(这里这条线永远卡住)

我希望是yes会填补stream缓冲区很快,所以我会开始看到你回来很快。 不幸的是他们从来没有

这是预期的吗? 我应该如何使用stream/pipe道,以达到预期的效果? 顺便说一下,我不在乎输出是否会以大块的forms返回……我知道这是stream(或底层文件I / O)缓冲魔术的结果。

感谢您的帮助

好吧,我想我知道我做错了什么。 server.js工作正常…这是打破pipe道的curl 。 显然, @-选项将stdin视为一个文件,即读取其全部内容,然后提交它。 当他们正在阅读时,我无法find如何使curlpipe的内容。 我认为这是不可行的,因为curl想要将文件的内容视为正常的HTTP post表单值。

无论如何,我修改了上面的例子,使用一个简单的nodejs客户端来做我想做的事情:

 term2> cat client.js var http = require('http'); var req = http.request('http://localhost:8000', function(res) { res.pipe(process.stdout); }); process.stdin.pipe(req); term2> yes|node client.js y y ... 

nodejsstream和pipe道摇滚!