node.js - Node js优先处理

标签 node.js asynchronous

如果我有一个 Node js 服务器,有许多繁重的进程在特定的时间段内工作,并且可能在同一时间内工作。所以这段时间服务器会很忙。 如果我们必须在服务器繁忙时处理请求,最好的方法是什么来优先处理该请求。

更新

场景

我的系统运行如下, 我构建了一个 RSS 解析器应用程序,需要有一些新闻源(RSS 链接),每个源都有自己的进程(回调函数)来每 x 分钟获取新闻,然后在获取所有新闻显示后,是否有新的新闻,我应该将其存储在数据库中,如果它存在但已更新,我应该在数据库中更新它,所以我在这个脚本中为所有进程运行许多繁重的进程,如果许多进程有相同的时间运行服务器挂起响应任何 HTTP 调用。 我想有一个子进程,但我无法将其放在一个文件中单独运行它。

最佳答案

您应该提供更多信息,以便我们了解您系统中的瓶颈/不良模式。

据我所知,您似乎正在运行一个node.js HTTP服务器,它也以(cron?)间隔执行作业。也许这些作业正在执行同步任务,从而阻塞事件循环队列。

Node.js http 服务器无法正常处理同步任务。由于 Node.js 是事件驱动的单线程,因此引擎在执行同步任务时无法执行任何其他操作,直到任务本身结束。

您应该生成另一个进程来进行繁重的同步操作。

const exec = require('child_process').exec;
exec('node your-sync-script.js', (e, stdout, stderr)=> {
    if (e instanceof Error) {
        console.error(e);
        throw e;
    }
    console.log('stdout ', stdout);
    console.log('stderr ', stderr);
});

但正如我所说,会有更多关于您的架构、任务逻辑和环境规范的有用信息。如果您的 API 依赖于数据库,并且在 cron 任务期间您正在转储数据、事务或类似内容,则也有可能您正在锁定数据库并且 https 请求正在等待数据库数据。

关于node.js - Node js优先处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53225528/

相关文章:

javascript - 错误 : No response has been set. 用于 Google 智能助理操作的云功能

Node.js 登录/注册 Redis 问题

node.js - Express 未捕获中间件中的异常

javascript - 安装后找不到 Node 私有(private)模块

c# - 将 MVC mini-profiler 时间安排到异步任务中

用于显式添加微任务或宏任务的 Javascript API

node.js - 无法将我自己的 Node js部署到aws elastic beanstalk

node.js - Express response 采用request方式

javascript - 使用父 Controller 的指令中的异步范围属性

Java - 如何将对象异步保存到数据库?