我刚开始看一些节点教程,我想帮助理解我从http.createServer()获得的响应和请求流。回应&请求是流,这是否意味着Node.js以块的形式发送和接收数据?
例如,如果我打电话
res.write("test1");
res.write("test2");
res.end();
它只会在我调用end()时写入这些内容,还是会刷新到流并发送给发出请求的客户端以及何时调用write()?
另一个详细阐述我的问题的例子是,如果我有一个带有大量明文数据的txt文件,那么我设置一个读取流,将该文件中的数据传输到res对象,它会将这些数据以块的形式传输或者执行一旦所有东西都在缓冲区中。
我想我的问题也适用于请求对象。例如,请求的主体是逐包构建并流式传输到服务器,还是一次性发送,节点只是选择让我们使用流来访问它。
非常感谢!
答案 0 :(得分:1)
第一次调用response.write()时,它会将缓冲的头信息和正文的第一个块发送给客户端。第二次调用response.write()时,Node.js假设数据将被流式传输,并分别发送新数据。也就是说,响应被缓冲到身体的第一个块。
所以基本上,如果你.write()一小段数据,它可以被缓冲,直到调用完整的块或.end()。如果.write()已经具有块的大小,它将立即传输。