【发布时间】:2013-06-15 22:59:06
【问题描述】:
我正在熟悉 nodejs 中的流,我有一个问题:
我有我认为最简单的nodejs“回显服务器”,即一个简单的管道返回响应流的服务器,无论它通过请求流接收到什么。 它有效,但有一个警告。客户端仅在关闭提交流后才接收回数据。 这是服务器代码:
var http = require('http')
var server = http.createServer(function (req, res) {
req.pipe(res);
});
server.listen(8000);
这是我的测试方法:
执行以下操作就好了
term1> node server.js&
term2> echo 'hello world!'|curl --no-buffer --data-binary @- 'http://localhost:8000'
hello world!
但是,它之所以起作用,是因为 echo 在完成后关闭了它的输出文件描述符,即,服务器在其客户端完成发送内容之前不会写入任何内容:
term2>
term2> yes|curl --no-buffer --data-binary @- 'http://localhost:8000'
(这里这条线永远卡住了)
我希望yes 会很快填充流缓冲区,所以我会开始看到 y 很快回来。不幸的是,他们从不这样做。
这是预期的吗?我应该如何使用流/管道才能达到预期的效果? 顺便说一句,我不在乎输出是否会以块的形式返回......我知道这将是流(或底层文件 i/o)发挥缓冲魔法的结果。
感谢您的帮助
【问题讨论】: