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

这是一个简单的脚本

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

如果WEBSITEvariables是' http://google.com '或' http://facebook.com '脚本不会返回到控制台。 但如果WEBSITEvariables是“ http://yahoo.com ”或“ http://wikipedia.org ”,它将返回到控制台。 有什么不同?

通过“返回到控制台”,我假设你的意思是该节点退出并在一个shell提示符下退回。

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

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

最终,节点或服务器将closures空闲连接(因此节点将退出)。 Google和Facebook很可能允许空闲连接比雅虎和维基百科生存更长的时间。

如果您希望您的脚本在完成后立即发出请求并退出,则需要禁用HTTP保持活动。 您可以通过禁用代理支持来做到这一点。

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

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

还有一些其他方法可以避免保持节点运行 。