iam用以下组件编写原型应用程序:
我开始使用nodejs(类型抄本)编程,并连接到其他服务。现在我在nodejs的cron工作上遇到了问题。我正在使用节点-cron来执行cronjob。
在一项工作中,我需要获得许多个人电脑的状态,并对它做一个总结。如果我这样做,这将阻塞主线程。所以我想我需要在一个单独的线程。
我怎样才能在nodejs中做到这一点?我应该使用webworker-线程吗?我在正道上吗?为此,我应该更好地使用Java(Grails/Spring)吗?我非常喜欢nodejs的简单性(对于http客户端,..)
希望有人能给我希望,我在正确的道路上。
发布于 2016-07-08 03:51:45
我只会使用节点簇。使用集群,主服务器可以创建多个工作人员,这意味着您的cron不会阻止传入请求。只要确保只有一个工人在做Cron。
我以前从未使用过节点-cron,但我有使用SyncedCron的经验。但应该是一样的。
对于http客户机,有很多库可以这样做,您可以检查请求或httpclient。
您的代码应该如下所示:
var cluster = require('cluster');
var http = require('http');
var numWorkers = require('os').cpus().length-1; // just give 1 cpu for OS to use, or maybe 2
if (cluster.isMaster) {
console.log('Master cluster setting up ' + numWorkers + ' workers...');
var cronPID=null;
for(var i = 0; i < numWorkers; i++) {
var worker=cluster.fork();
if(i==0){
//instructing the first worker to assume role of SyncedCron.
worker.send('you do it!');
cronPID=worker.process.pid;
console.log("worker "+cronPID+" choosed as Cron worker!");
}
}
cluster.on('online', function(worker) {
console.log('Worker ' + worker.process.pid + ' is online');
});
cluster.on('exit', function(worker, code, signal) {
// have to revive the worker
console.log('Worker ' + worker.process.pid + ' died with code: ' + code + ', and signal: ' + signal);
console.log('Starting a new worker');
var newWorker=cluster.fork();
if(cronPID==worker.process.pid)
{ // need to re-elect a new cron worker!
newWorker.send('you do it!');
cronPID=newWorker.process.pid;
console.log("worker "+cronPID+" choosed as Cron worker!");
}
});
}else
{ // worker sides
process.on('message', (msg) => {
// validate your message that you get
// if validated, create a cron job here
});
// create your express below, I assume you use express instead of node's http library
var express = require('express');
var app = express();
app.post...........
} 注意:
https://stackoverflow.com/questions/38258024
复制相似问题