为什么在未读取响应的情况下,节点http客户端仍在运行
Why does node http client keeps running if response is not read?
我刚刚开始使用Node.js,我正在尝试编写一个简单的http客户端,它只向服务器发送一个post请求。
var req = http.request(
{
host : 'localhost',
port: 3000,
url : '/',
method:'POST'
},function(res){
console.log('res status - ' + res.statusCode);
res.on('data', function(){}); //<--------
}
);
(我省略了写入请求和调用req.end()的代码)。我观察到,如果最后一行被注释掉,客户端没有读取响应,那么客户端就不会终止。这背后的原因是什么?
这种行为是因为以下Node实现:
发布http.request()
创建具有以下行为的对象http.ClientRequest
如果没有添加"响应"处理程序(即请求方法的第二个参数),则响应将被完全丢弃。但是,如果添加了"response"事件处理程序,则必须使用响应对象中的数据,方法是每当出现"可读"事件时调用response.read(),或添加"data"处理程序,或调用resume()方法。在数据被消耗之前,'end'事件不会触发。此外,在读取数据之前,它将消耗内存,最终可能导致"进程内存不足"错误。
相关文章:
- 节点如何将文件传递到http.write方法
- Angular Cross Origin Request CORS失败,但节点http.get()成功返回
- 如何同时使用节点承诺和 http
- 节点.js集群模块不会在 http 上释放套接字/端口.Server.close().
- 如何使用节点http代理抑制来自目标的301重定向
- 如何读取在节点中发出的简单http请求的响应
- HTTP请求的节点内存使用情况
- 节点.js显示在本地主机上,但不在同一台机器上的http上显示
- 节点.js中的 HTTP 请求
- HTTP 获取节点 JS 以使用文档元素进行解析
- 节点 http.get 解析 JSON 正文
- 节点 JS HTTP 请求不使用 http 请求
- 节点.js:HTTP 获取请求
- 如何使用本机节点 JS HTTP 库将图像写入缓冲区
- 节点.js HTTP 响应流
- 节点 js http 服务器错误处理
- 尝试运行节点 http 服务器时出现绑定错误
- 如何从节点中获取数据.js http get request
- 通过 HTTP 在两个节点.js服务器之间传输文件
- 在节点.js中设置 HTTP GET 中的 URL 参数的默认值