Node.js HTTP模块:响应+请求

Node.js HTTP模块:响应+请求

问题描述:

我刚刚开始观看一些节点教程,我想帮助了解从http.createServer()获取的响应和请求流。响应&请求是流,这是否意味着比Node.js发送和接收块中的数据?Node.js HTTP模块:响应+请求

例如,如果我称为

res.write("test1"); 

res.write("test2"); 

res.end(); 

将它只能写二者的那些东西,当我呼叫结束()或将其冲洗到流并发送至客户端发出请求作为和当我打电话写()?

另一个详细说明我的问题的例子是,如果我有一个有很多纯文本数据的txt文件,那么我会设置一个读取流,将数据从该文件管道传输到res对象,它一旦一切都在缓冲区中。

我想我的问题也适用于请求对象。例如,请求的主体是逐个数据包构建并流式传输到服务器,还是一次发送,而节点只是选择让我们使用流来访问它。

非常感谢!

+0

这取决于。 ... https://*.com/questions/18857693/does-express-js-support-sending-unbuffered-progressively-flushed-responses –

第一次调用response.write()时,它会将缓存的头信息和正文的第一个块发送给客户端。第二次调用response.write(),Node.js假定数据将被流式传输,并分别发送新的数据。也就是说,响应被缓冲到身体的第一部分。

full foc

所以基本上,如果你.WRITE()一小块数据,可以缓冲,直到那里有一个完整的块或.END()被调用。如果.write()已经有一个块的大小,它将立即传输。

+0

我明白了,所以让我澄清,如果我response.write()两次,然后节点将分别发送第二块数据。这就是为什么我们有res.end(),所以它知道我什么时候不会再发送块,并且可以关闭连接。我想我除了澄清之外唯一的其他问题也是缓存和默认流式传输的请求?我认为是这样,我只需要听('数据')。 – user2814533

+0

@ user2814533是 –

+0

嗯,我可以再问一件事。当我不包括res.end()和我访问本地主机:3000我什么也没有得到,但是当我把.end()它显示我写的数据;然而,基于你所说的“第一次调用response.write()时,它会将缓冲的头信息和正文的第一部分发送给客户端。”不管是否包含res.end(),都不应该得到第一个res.write()的数据? – user2814533