6

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

var client = http.get(options, 
        function(res) {
            console.log(res.statusCode);
            client.destroy();
          }
);

但是,当我将 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();
            });
          }
);

它将抛出异常,因为 http.socket 为空。所以,我不能破坏它。

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

4

2 回答 2

5

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

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

或发送Connection: close标头

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

于 2011-07-12T03:04:04.807 回答
0

对于您的问题:由 http.get 或 http.request 创建的请求将默认关闭其套接字(连接)。您不必关闭它。

对于您的代码示例:Nodejs 在您的“res.on('end', yourCb)”之前注册了 res.on('end', responseOnEnd)。responseOnEnd 将关闭套接字。因为 responseOnEnd 在 yourCb 之前被调用,所以你不能破坏 res.on('end', yourCb) 中的套接字。

于 2022-02-27T10:52:35.383 回答