- 我有一个在 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/