仅在集群 NodeJS 应用程序中的主进程上执行代码
Executing code only on a Master process in a clustered NodeJS application
基础知识:
我需要触发调用第三方 api 端点的间隔函数 每小时仅一次 。我不希望在我的工人中产生这个函数,因为每个工人每小时都会调用这个函数。
我在很多例子中都看到了这一点:
//Example Clustering
if (cluster.isMaster) {
//Do I insert my function here?
for (var i = 0; i < numCPUs; i++) {
// Create a worker
cluster.fork();
}
}
else {
var app = express();
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.listen(8080);
}
我不知道将我的 Timed Nodejs 方法放在哪里,它只能由主进程处理。
似乎没有太多关于这个特定主题的指南或教程。非常感谢任何帮助。
是的,您基本上是正确的 - 假设您在上面定义了 makeHttpRequest
,代码可能如下所示:
if (cluster.isMaster) {
setInterval(
() => makeHttpRequest(),
1000 * 60 * 60
)
for (var i = 0; i < numCPUs; i++) {
// Create a worker
cluster.fork();
}
} else {
var app = express();
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.listen(8080);
}
请记住,setInterval
在短时间或长时间跨度内都不可靠 ,并且有更好的工具可供使用。如果您需要较长的间隔(例如 1 小时),您可以使用 https://github.com/kelektiv/node-cron
基础知识:
我需要触发调用第三方 api 端点的间隔函数 每小时仅一次 。我不希望在我的工人中产生这个函数,因为每个工人每小时都会调用这个函数。
我在很多例子中都看到了这一点:
//Example Clustering
if (cluster.isMaster) {
//Do I insert my function here?
for (var i = 0; i < numCPUs; i++) {
// Create a worker
cluster.fork();
}
}
else {
var app = express();
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.listen(8080);
}
我不知道将我的 Timed Nodejs 方法放在哪里,它只能由主进程处理。
似乎没有太多关于这个特定主题的指南或教程。非常感谢任何帮助。
是的,您基本上是正确的 - 假设您在上面定义了 makeHttpRequest
,代码可能如下所示:
if (cluster.isMaster) {
setInterval(
() => makeHttpRequest(),
1000 * 60 * 60
)
for (var i = 0; i < numCPUs; i++) {
// Create a worker
cluster.fork();
}
} else {
var app = express();
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.listen(8080);
}
请记住,setInterval
在短时间或长时间跨度内都不可靠 ,并且有更好的工具可供使用。如果您需要较长的间隔(例如 1 小时),您可以使用 https://github.com/kelektiv/node-cron