我正在学习Node.js的基础知识,对于HTTP处理有一个相对幼稚的问题。下面是一个基本的回声服务器,来自nodejs.org:
var http = require('http');
http.createServer(function(request, response) {
var body = [];
request.on('data', function(chunk) {
body.push(chunk);
}).on('end', function() {
body = Buffer.concat(body).toString();
response.end(body);
});
}).listen(8080);
如果我对HTTP一无所知并查看这段代码,我会认为它是某种流式API:有一个输入流(
request
)和一个输出流(response
),而且这个特定的服务器将输入流的内容重定向到输出流中,随着数据的到来。这种印象得到了加强,因为在幕后,request
对象实现了ReadableStream
接口,而response
则实现了WriteableStream
。但这不是传统的HTTP视图方式!客户端发出单一离散请求,然后等待单一离散响应。我不知道是否存在必须在完全读取请求之前开始组合响应的情况,并且一旦提交请求,客户端就无法修改请求或直接影响响应。
所以我的问题是:
Node.js的
request
和response
对象为什么使用流API?通过充分利用这一事实,是否可以获得任何附加的灵活性或功能?