我正在熟悉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)进行缓冲魔术的结果。
感谢您的帮助