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

Par*_*ore 1 http node.js

这是一个简单的脚本

    var http = require("http");

    http.get( WEBSITE, function(res) {
       console.log("Does not return");
       return;
    });
Run Code Online (Sandbox Code Playgroud)

如果WEBSITE变量是" http://google.com "或" http://facebook.com ",则脚本不会返回控制台.但如果WEBSITE变量是' http://yahoo.com '或' http://wikipedia.org ',它将返回到控制台.有什么不同?

jos*_*736 7

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

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

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

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

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

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

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

还有,你可以去避免保持有效指示保持节点运行一些其他的方法.