【问题标题】:node.js - after get request, script does not return to consolenode.js - 获取请求后,脚本不返回控制台
【发布时间】:2014-05-17 03:44:05
【问题描述】:

这是一个简单的脚本

    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' 它返回到控制台。有什么区别?

【问题讨论】:

  • 你是不是建议最后的return语句退出程序?它只是从函数中返回,这在那时是多余的。您的程序必须有更多内容。当事件循环无事可做时节点退出。因此,必须有一个挂起的定时器或 I/O 操作。您需要分享更多程序代码以进行故障排除。
  • 我的脚本中除了上面显示的代码之外什么都没有

标签: node.js http


【解决方案1】:

通过“返回控制台”,我假设您的意思是节点退出并让您回到 shell 提示符处。

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

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

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

如果您希望脚本发出请求并在完成后立即退出,您需要禁用 HTTP 保持活动。您可以通过禁用 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

【讨论】:

    猜你喜欢
    • 2017-06-07
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多