javascript - setInterval 会阻止/干扰 node.js/express HTTP 服务器吗?

标签 javascript node.js express

  • 我有一个在 Ubuntu 上运行的 Express http 服务器
  • 它执行一些app.get/post 调用并与mongoDB对话。

现在我需要定期运行独立的 javascript,它将与同一个 mongoDB 通信。

因此,在 app.js 中,我计划执行以下操作:

app.get()
app.post()
...
app.listen(3443);

setInterval(function () {
  runStandAloneScript();  
}, 86400); 

function runStandAloneScript() {
    // makes http calls to local server and mongodb locally
}

我的问题是这会以任何方式阻止/干扰 app.get/post 调用吗?

最佳答案

如果 runStandAloneScript 是同步的,它将阻止您的服务器,并且只要该方法运行就会阻止它。

setInterval(function () {
  runStandAloneScript();
}, 86400); 

function runStandAloneScript() {
   sleepSync(5); // 5 seconds sleep, blocking
}

前面的脚本将每 86400 秒阻塞服务器 5 秒,阻止处理任何请求。

如果您在 runStandAloneScript 中执行一些非阻塞 I/O,您的服务器将正常运行。

function runStandAloneScript() {
   return fs.readFile('./tmp/some-file.txt');
}

默认情况下,文件系统操作、数据库调用和 http 请求在 Node.js 中始终是异步的,因此除非您运行一些繁重的计算或使用这些方法的同步版本(例如 fs.readFileSync),否则您的服务器不会被阻止。

关于javascript - setInterval 会阻止/干扰 node.js/express HTTP 服务器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50575050/

相关文章:

javascript - Express中的Socket.io从客户端接收未定义的数据

javascript - 在链接前插入复选框?

javascript - 使用 jQuery 设置 SharePoint 中隐藏字段的值

javascript - 测试 jest 和 new Date()

Node.js 服务器不释放内存

node.js - Express 中路由的 URL 生成

javascript - html 页面中的大背景图片

node.js - Node + express : Multiple authentication strategies according to page and user type

node.js - 无法触发 Node 流的完成事件

javascript - 错误: TypeError('app. use()需要中间件函数