如何很好地销毁Node.js http.request连接?

mur*_*lai 6 http request node.js destroy

如果我在命令行中运行它,程序将在client.destroy()之后停止;

var client = http.get(options, 
        function(res) {
            console.log(res.statusCode);
            client.destroy();
          }
);
Run Code Online (Sandbox Code Playgroud)

但是,当我将client.destroy()放在res.on('end')中时,情况并非如此:

var client = http.get(options, 
        function(res) {
            console.log(res.statusCode);
            res.on('end', function() {
                console.log("done");
                client.destroy();
            });
          }
);
Run Code Online (Sandbox Code Playgroud)

它将抛出异常,因为http.socket为null.所以,我无法摧毁它.

在这种情况下,程序执行将挂起并且不会结束.我能做些什么来阻止它?(除了process.exit());

And*_*rov 5

如果是单个请求,您可以将shouldKeepAlive设置为false

var request = http.get(options, 
        function(res) {
            console.log(res.statusCode);
          }
);
request.shouldKeepAlive = false
Run Code Online (Sandbox Code Playgroud)

或发送Connection: close标题

您无法访问套接字,因为它在请求'end'事件处理程序中分离