【问题标题】:How does node.js know when to exit?node.js 如何知道何时退出?
【发布时间】:2015-01-29 08:29:20
【问题描述】:

我对 node.js 非常陌生,我无法轻易在谷歌上关注的第一件事。考虑最典型的 node.js 示例:

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

node.js 如何知道在最后一行执行后它不应该退出?来自 .NET 我有一个简化的假设,即当所有非后台线程都终止时进程退出。由于 node.js 是单线程的,我认为应该有一些逻辑监控事件订阅来决定是否还有可能触发的事件,否则 node.js 可以终止。不幸的是,我找不到任何文档。有人可以帮忙吗?

【问题讨论】:

    标签: javascript node.js process exit terminate


    【解决方案1】:

    什么?此代码不退出!相反,它开始侦听任何 http 请求。

    什么时候退出?

    else 如果没有定义请求处理程序,并且如果它不再监听任何事件并且所有代码语句都已执行,则它退出 例如: 一个只包含一个语句的简单服务器是:

    console.log('Hiii');
    

    这将在执行最后一条语句后立即退出,因为我们不希望它监听任何事件。

    【讨论】:

      【解决方案2】:

      如果您具有 .NET 背景,您可能已经编写了一些托管在 IIS 上的 ASP.NET Web 应用程序。在这种情况下,您的 .NET 框架会创建一个应用程序线程池来处理传入请求,然后执行您的页面并将响应发送回客户端。因此,您的页面执行由 .NET 框架处理。在整个过程中,IIS 一直在监听传入的请求并将请求处理给适当的工作线程/线程。
      Node.JS 的工作方式与您刚刚指示 Node 如何处理请求的方式相同。创建服务器时,节点会打开套接字以侦听传入请求。但是,由于没有写入关闭命令,您的服务器将继续运行。

      要了解节点如何处理/处理请求,请访问
      http://strongloop.com/strongblog/node-js-performance-event-loop-monitoring/ http://strongloop.com/strongblog/node-js-event-loop/

      了解如何关闭服务器访问 http://nodejs.org/api/net.html#net_server_close_callback

      【讨论】:

      • 谢谢! “事件循环”是我需要的关键字。在文档中我发现了以下内容:节点在执行输入脚本后简单地进入事件循环。当没有更多回调要执行时,节点退出事件循环。
      • @ironic 完全正确。只是为了补充一点。如果由于您注册了回调而创建服务器,则节点通常不会退出,除非您以编程方式关闭它。您可以尝试忽略代码中的回调。在这种情况下,您的服务器将立即关闭。
      猜你喜欢
      • 2016-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 2011-12-03
      • 1970-01-01
      相关资源
      最近更新 更多