什么决定了Node.js应用程序是否继续运行?什么决定了Node.js应用程序是否继续运行?
当代码是这样的:
console.log('Hello World');
这句话将被打印和应用程序将立即退出。
但有时当我们有一个像监听它的Web服务器一样的东西继续工作。
确定应用程序是否继续运行的一般规则是什么?它是与事件循环有关还是类似的东西?
什么决定了Node.js应用程序是否继续运行?什么决定了Node.js应用程序是否继续运行?
当代码是这样的:
console.log('Hello World');
这句话将被打印和应用程序将立即退出。
但有时当我们有一个像监听它的Web服务器一样的东西继续工作。
确定应用程序是否继续运行的一般规则是什么?它是与事件循环有关还是类似的东西?
我不认为事件循环与保持服务器运行有任何关系。当你期望通过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
。
现在想想千位的请求,会有一个回送回应的循环。该循环称为事件循环。
希望这个答案很有意义。谢谢!!
事件循环是(部分)负责进程被节点保持开放。
简而言之,事件循环通过对事件循环中的事件进行代码排队来实现,只要有事件排队,进程就不会存在。一旦所有事件都耗尽并且代码已经完成运行,默认情况下,该进程将在那里存在,因为没有更多代码需要运行,并且没有更多要处理的事件。
“在后台工作”的任何事情实际上是为事件循环处理一个事件,并检查它是否完成。有些东西(如http服务器和各种事件发射器)将导致进程永远不会退出。
是的,你说得对。我认为这让我的回答部分错误。事件循环是不是按照我所说的方式工作? –
您的回答详细介绍了事件循环的另一面(它是如何使事情看起来并行的),它虽然正确,但与“为什么会阻止进程终止?”这个问题无关。 –
这个答案并不完全准确。当队列中还有事件时,节点不会停止,但即使它是空的,它有时会*停止,有时甚至不会。这真是有趣的事情。 – Bergi
你还没有结束管道,或给了一个Reponse.End假设你听着你的意思是一个像node.js应用程序的路由器,你可以给一个代码保持运行的例子吗? –
您需要某种让应用程序保持活动状态的进程。 'setInterval(function(){console.log(“Hello World。”)},1000);' – hampusohlsson
https://github.com/mafintosh/why-is-node-running – dude