在 Node js 中,如果新请求到达并且事件循环已经忙于处理请求,会发生什么情况?

2023-12-21

我有这个文件名为index.js:

const express = require('express')
const app = express()
const port = 3000

app.get('/home', (req, res) => {
    res.send('Hello World!')
})

app.get('/route1', (req, res) => {
    var num = 0;
    for(var i=0; i<1000000; i++) {
        num = num+1;
        console.log(num);
    }
    res.send('This is Route1 '+ num)
})

app.listen(port, () => console.log(`Example app listening on port ${port}!`))

我首先调用端点/route1然后立即到达终点/home. The /route1 has for loop并需要一些时间才能完成然后/home运行并完成。我的问题是当应用程序忙于处理时/route1,请求如何/home处理了,给定的 Node js 是单线程的?


传入的请求将在 NodeJS 事件队列中排队,直到 NodeJS 有机会处理下一个事件(当长时间运行的事件处理程序完成时)。

由于nodejs是一个事件驱动的系统,它从事件队列中获取一个事件,运行该事件的回调直到完成,然后获取下一个事件,运行它直到完成,依此类推。 Nodejs 的内部将等待运行的事物添加到事件队列中,以便它们排队等待事件循环的下一个周期。

根据nodejs如何进行网络的内部结构,传入的请求可能会在操作系统中排队一段时间,然后移动到事件队列,直到nodejs有机会服务该事件。

我的问题是,当应用程序忙于处理 /route1 时,鉴于 Node js 是单线程的,如何处理对 /home 的请求?

请记住,node.js 将您的 Javascript 作为单线程运行(尽管我们现在有工作线程 https://nodejs.org/api/worker_threads.html如果你愿意的话),但它确实在内部使用线程来管理文件 I/O 和其他一些类型的异步操作等。不过,它不需要用于网络的线程。这是通过操作系统的实际异步接口进行管理的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Node js 中,如果新请求到达并且事件循环已经忙于处理请求,会发生什么情况? 的相关文章

  • 通过套接字的身份验证方法

    我正在尝试通过套接字进行身份验证sailsjs and passport 挑战似乎在于套接字连接没有会话 并且 sailsjs 模拟请求对象 导致它没有 Passport 中间件设置 这导致nodejs抛出一个错误 说req对象没有调用的方
  • 何时使用node.js、sinatra、rails? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这 3 种语言 框架的最佳用途是什么 混合所有 或 2 个 有用吗 如果您正在构建一个完整的 Web 应用程序 您可能应该使用 Rails 因为
  • 如何在express中动态渲染/加载页面?

    我需要使用express gt 3 0 框架动态加载 渲染nodejs v1 8 15 中页面的一部分 一般来说 我想创建一个单页应用程序 我在页面顶部有一个带有链接的菜单 单击链接将更改下面的内容 就像 AJAX 页面加载一样 例如 gt
  • Nodejs 将 Base64 作为 Image 提供服务

    我正在尝试将 base64 字符串作为图像提供image png标头 标题设置正确 但图像没有显示 我只能看到一个空白屏幕 这是代码 request someCustomLink function error response body s
  • 使用edge.js .Net C# 模块是否可以调用进程的node.js 部分,即进行反向调用?

    您可以看到从 Node js gt C 的互操作模型 here http tjanczuk github io edge 7 我想知道的是 C 代码可以在返回之前从 C 调用进程的 Node js 部分中的方法吗 想象一下 如果你接到一个电
  • Heroku 应用程序上的 Nodejs Express EACCES 0.0.0.0:80

    我正在尝试在他们的网站上新创建的 Heroku 应用程序上运行 Node 应用程序 我按照他们的步骤操作 但在显示应用程序状态时仍然遇到错误 我跟着Node js 入门 https devcenter heroku com articles
  • Electron webContentsexecuteJavaScript:无法在 loadURL 上第二个执行脚本

    我正在测试 Electron 特别是使用executeJavaScript 我的项目使用 POST 请求登录网站 然后执行一些工作并使用同一会话加载第二个 URL 在第二个 URL 中 我需要执行 JS 但我不确定我做错了什么 在此示例中
  • Angular 5 - ag-grid 18.0.1 - 边缘崩溃

    我一直在到处搜索 但无法找到与此相关的任何信息 很可能是因为 ag grid update 18 x 是新的 无论如何 似乎在将 ag grid 从 17 1 1 更新到 18 0 1 后 任何带有 ag grid 的页面最终都会导致 ED
  • 确定是否向 Firebase 实时数据库添加或删除数据

    每当添加新帖子时 我都会尝试将通知推送到 Android 应用程序 但是 只要数据 更改 即即使帖子被删除 我不需要 通知也会到达 我如何设置一个条件 以便 FCM 仅在添加帖子时才发送通知 这是我的 index js 文件 const f
  • 启动nodejs时出错:openssl配置失败

    启动 Express 节点时出现以下错误 openssl 配置失败 错误 02001003 系统库 fopen 没有这样的 过程 节点无论如何都会启动 我没有尝试使用 SSL 这是起始代码 app Express app set port
  • 使用 npm 作为构建工具连接文件

    我最近发现我可以使用 npm 作为任务运行程序 而不是 gulp 或 grunt 到目前为止 一切都很棒 lint stylus jade uglify watch 等 但串联部分 我似乎无法实现 gulp 是这样的 gulp task s
  • TRACKER:错误TRK0005:无法找到:“CL.exe”。该系统找不到指定的文件

    我尝试在 Windows 8 上的 Node js 项目中执行以下命令 npm 安装 电子邮件受保护 cdn cgi l email protection 但我收到一个错误 我不知道如何处理 TRACKER 错误TRK0005 无法找到 C
  • EJS在JS onload函数中访问express变量

    我知道你可以像这样获取 ejs 文件中变量的值 h1 h1 如果我要在同一个 ejs 页面的 onload javascript 函数中使用相同的标题变量 我将如何使用它 例如 这个函数产生一个控制台错误说 未捕获的语法错误 意外的标识符
  • 无法在docker容器中安装npm?

    我正在数字海洋服务器的 Docker 平台上部署一个简单的 Node js 应用程序 包 json name docker centos hello private true version 0 0 1 description Node j
  • 在这种情况下如何填充 Mongoose?

    const userSchema new mongoose Schema email type String unique true password String notifications notifiId type Schema Ty
  • Google App Engine:修改云运行环境

    我正在尝试部署一个使用自定义 Node js 服务器的 Next js 应用程序 我想将自定义构建变量注入应用程序 next config js const NODE ENV process env NODE ENV const envTy
  • Node.js:如何在检索数据(块)时关闭响应/请求

    我正在用 node js 构建一个应用程序 它加载多个页面并分析内容 因为 node js 发送块 所以我可以分析这些块 如果一个块包含例如索引 nofollow 我想关闭该连接并继续其余部分 var host example com to
  • 无法运行 npm install

    In here http devdocs magento com guides v2 0 frontend dev guide css topics css debug html它说要跑npm install 但是当我运行时出现此错误sud
  • 模块构建失败(来自 ./node_modules/babel-loader/lib/index.js)Vue Js

    我从 GitHub 下载了一个我和我的朋友正在开发的项目 但是当我尝试运行时 npm run serve 我收到这个错误 src main js 中的错误 Module build failed from node modules babe
  • 摆脱node-jsx

    在我的 NodeJS 应用程序的路由器中 我想渲染一个 React 应用程序 由于它没有被浏览器化 并且已反应 因此它返回unexpected token lt 构建时出错 我发现如果我require node jsx install 它不

随机推荐