Javascript setInterval会阻止/干扰node.js/express HTTP服务器吗? 我有一个运行在Ubuntu上的express http服务器 它执行一些app.get/post调用,并与mongoDB对话

Javascript setInterval会阻止/干扰node.js/express HTTP服务器吗? 我有一个运行在Ubuntu上的express http服务器 它执行一些app.get/post调用,并与mongoDB对话,javascript,node.js,express,Javascript,Node.js,Express,现在我需要定期运行独立的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

现在我需要定期运行独立的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
}

我的问题是,如果
runStandAloneScript
是同步的,它会阻止/干扰
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');
}

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

除非中的功能是同步的,否则不会被阻止

基本上,在代码中,每86400毫秒调用一次runStandAloneScript()。计时器运行后,它将执行runStandAloneScript(),然后再次保留计时器,此过程将继续


话虽如此,如果runStandAloneScript()是同步的,那么它将阻塞服务器。因此,请使用异步函数,以便您的服务器能够适当地处理请求,或者根据场景使用子进程机制。

如果
runStandAloneScript
需要大量时间才能完成,则可以