2016-04-28 76 views
3

什么决定了Node.js应用程序是否继续运行?什么决定了Node.js应用程序是否继续运行?

当代码是这样的:

console.log('Hello World'); 

这句话将被打印和应用程序将立即退出。

但有时当我们有一个像监听它的Web服务器一样的东西继续工作。

确定应用程序是否继续运行的一般规则是什么?它是与事件循环有关还是类似的东西?

+0

你还没有结束管道,或给了一个Reponse.End假设你听着你的意思是一个像node.js应用程序的路由器,你可以给一个代码保持运行的例子吗? –

+0

您需要某种让应用程序保持活动状态的进程。 'setInterval(function(){console.log(“Hello World。”)},1000);' – hampusohlsson

+0

https://github.com/mafintosh/why-is-node-running – dude

回答

0

我不认为事件循环与保持服务器运行有任何关系。当你期望通过http发出一些请求时,你必须收听用户请求的某个端口。除非您想停止从您的用户请求您的服务器,否则您必须不断收听。

另一方面事件循环是当user-1发送请求您的服务器接受请求并开始对它进行处理的东西。但是,由于node.js它没有保持端口......它一直在听。当user-2发送请求时,服务器接受请求并开始处理请求,如user-1所做的那样。当您的服务器完成user-1's请求时,它会向用户1发送必要信息的响应。它会为user-2做同样的事情。但是如果服务器在完成user-1's请求之前完成了user-2's请求的处理,它将发送user-2响应,然后到user-1

现在想想千位的请求,会有一个回送回应的循环。该循环称为事件循环。

希望这个答案很有意义。谢谢!!

3

事件循环是(部分)负责进程被节点保持开放。

简而言之,事件循环通过对事件循环中的事件进行代码排队来实现,只要有事件排队,进程就不会存在。一旦所有事件都耗尽并且代码已经完成运行,默认情况下,该进程将在那里存在,因为没有更多代码需要运行,并且没有更多要处理的事件。

“在后台工作”的任何事情实际上是为事件循环处理一个事件,并检查它是否完成。有些东西(如http服务器和各种事件发射器)将导致进程永远不会退出。

+0

是的,你说得对。我认为这让我的回答部分错误。事件循环是不是按照我所说的方式工作? –

+0

您的回答详细介绍了事件循环的另一面(它是如何使事情看起来并行的),它虽然正确,但与“为什么会阻止进程终止?”这个问题无关。 –

+0

这个答案并不完全准确。当队列中还有事件时,节点不会停止,但即使它是空的,它有时会*停止,有时甚至不会。这真是有趣的事情。 – Bergi

相关问题