node.js - 获取请求后,脚本不会返回到控制台

时间:2014-04-14 19:12:19

标签: node.js http

这是一个简单的脚本

    var http = require("http");

    http.get( WEBSITE, function(res) {
       console.log("Does not return");
       return;
    });

如果WEBSITE变量为“http://google.com”或“http://facebook.com”脚本未返回控制台。 但如果WEBSITE变量为“http://yahoo.com”或“http://wikipedia.org”,则会返回控制台。有什么不同?

1 个答案:

答案 0 :(得分:7)

通过"返回控制台"我假设您的意思是退出节点并在shell提示符下退回。

实际上,节点最终退出您列出的所有域。 (你只是不耐烦。)

您所看到的是HTTP保持活动的结果。默认情况下,节点在HTTP请求完成后保持TCP连接打开。这使得对同一服务器的后续请求更快。只要TCP连接仍处于打开状态,节点就不会退出。

最终,节点或服务器将关闭空闲连接(因此节点将退出)。谷歌和Facebook可能允许空闲连接比雅虎和维基百科更长时间地存在。

如果您希望脚本发出请求并在完成后立即退出,则需要禁用HTTP keep-alives。您可以通过停用Agent支持来执行此操作。

http.get({ host:'google.com', port:80, path:'/', agent:false }, function(res) {
   ...
});

如果您需要此特定功能,请仅禁用代理。在正常,长期运行的应用程序中,禁用代理可能会导致许多问题。

还有some other approaches you can take to avoid keep-alives keeping node running