即使在事件循环中没有要执行的回调,Node.js Web 服务器如何保持 运行?
How does A Node.js Web Server Keep Running Even When There Are No Callbacks To Be Executed In The Event Loop?
下面的代码是一个简单的 Node.js 网络服务器,它在匹配 URL 时响应请求。
网上查了一下node.js据说一旦启动脚本(node index.js
)回调就会被放到合适的阶段,然后在你的脚本被解析后节点进程就会进入事件循环并执行特定于阶段的适当回调。如果没有更多的回调要执行,节点将退出。
所以我的问题是当我第一次访问 home page "/"
或 Hello Page "/hello
" 时请求处理程序是否是 运行",为什么节点仍然是 运行ning即使在后续请求之后。
const http = require('http');
const server = http.createServer((req,res) => {
if(req.url === "/") {
res.end("Home Page")
}
else if(req.url === "/hello") {
res.end("Hello Page")
}
else {
res.end("Page Not Found")
}
})
server.listen(5000)
我希望一旦请求处理程序被执行,它应该从它被放入的任何阶段中删除,因此节点应该退出。那么是什么阻止了 Node 程序退出呢?
Node.js 不会仅仅因为事件循环没有待处理的工作而退出。 (This page 在这方面很遗憾 misleading-through-being-incomplete。)它退出如果:
- 事件循环没有待处理的工作,并且
- 没有未完成的 I/O 请求,并且
- 没有侦听I/O 服务器套接字
(我认为这是一个完整的列表。我找不到相关的文档,虽然我记得几年前在他们的网站上读过一些东西。)
如果它在事件循环没有待处理的工作时退出,它甚至不会等待 运行 您的连接回调一次。它会在 listen
调用后立即退出。
下面的代码是一个简单的 Node.js 网络服务器,它在匹配 URL 时响应请求。
网上查了一下node.js据说一旦启动脚本(node index.js
)回调就会被放到合适的阶段,然后在你的脚本被解析后节点进程就会进入事件循环并执行特定于阶段的适当回调。如果没有更多的回调要执行,节点将退出。
所以我的问题是当我第一次访问 home page "/"
或 Hello Page "/hello
" 时请求处理程序是否是 运行",为什么节点仍然是 运行ning即使在后续请求之后。
const http = require('http');
const server = http.createServer((req,res) => {
if(req.url === "/") {
res.end("Home Page")
}
else if(req.url === "/hello") {
res.end("Hello Page")
}
else {
res.end("Page Not Found")
}
})
server.listen(5000)
我希望一旦请求处理程序被执行,它应该从它被放入的任何阶段中删除,因此节点应该退出。那么是什么阻止了 Node 程序退出呢?
Node.js 不会仅仅因为事件循环没有待处理的工作而退出。 (This page 在这方面很遗憾 misleading-through-being-incomplete。)它退出如果:
- 事件循环没有待处理的工作,并且
- 没有未完成的 I/O 请求,并且
- 没有侦听I/O 服务器套接字
(我认为这是一个完整的列表。我找不到相关的文档,虽然我记得几年前在他们的网站上读过一些东西。)
如果它在事件循环没有待处理的工作时退出,它甚至不会等待 运行 您的连接回调一次。它会在 listen
调用后立即退出。