这是一个简单的脚本
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”,则会返回控制台。有什么不同?
答案 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。