【发布时间】:2019-08-07 03:46:39
【问题描述】:
我正在尝试学习 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?是否有任何额外的灵活性或功能可以通过充分利用这一事实来实现?
【问题讨论】: