繁体   English   中英

为什么如果没有读取响应,节点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() ,或者添加“ 数据 ”处理程序,或者通过调用。 resume()方法。 在消耗数据之前,' end '事件不会触发。 此外,在读取数据之前,它将占用内存,最终可能导致“进程内存不足”错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM