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

标签 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 ' 它返回到控制台。有什么不同?

最佳答案

通过“返回控制台”,我假设您的意思是 Node 退出并在 shell 提示符下返回。

事实上, Node 确实最终退出了您列出的所有这些域。 (你只是不耐烦。)

您看到的是 HTTP keep-alives 的结果。默认情况下, Node 在 HTTP 请求完成后保持 TCP 连接打开。这使得对同一服务器的后续请求更快。只要 TCP 连接仍然打开, Node 就不会退出。

最终, Node 或服务器将关闭空闲连接(因此 Node 将退出)。与雅虎和维基百科相比,谷歌和 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 .

关于node.js - 获取请求后,脚本不返回到控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23068327/

相关文章:

node.js - nodejs this点在函数中未定义

使用 socket.io 的 Javascript 游戏。服务器滞后

javascript - 如何使用 VM 在 nodejs 中安全地运行用户代码而不容易受到攻击

node.js - 使用授权方法和新附加参数 : accessToken in Header? 有什么区别

http - 在 Jmeter 中同时运行的最大线程数是多少?

ruby - Timeout::Error 不是在 Ruby 中拯救

javascript - 无法通过nodejs读取upoladed文件的属性

node.js - Node js - 运行多个child_process,但某些请求意外关闭

C# HttpClient 的每个实例都获得它自己的 ServicePoint

node.js - 即使我使用nodemon,Docker也不会重新加载nodejs应用程序?