首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应用程序(Webinterface+ Cron-Jobs +HTTP-客户端) -- JAVA vs NODEJS

应用程序(Webinterface+ Cron-Jobs +HTTP-客户端) -- JAVA vs NODEJS
EN

Stack Overflow用户
提问于 2016-07-08 02:19:11
回答 1查看 229关注 0票数 0

iam用以下组件编写原型应用程序:

  • 管理员的网络接口
  • 做cron工作(统计数据生成,..)
  • 通过http与其他over服务交互。

我开始使用nodejs(类型抄本)编程,并连接到其他服务。现在我在nodejs的cron工作上遇到了问题。我正在使用节点-cron来执行cronjob。

在一项工作中,我需要获得许多个人电脑的状态,并对它做一个总结。如果我这样做,这将阻塞主线程。所以我想我需要在一个单独的线程。

我怎样才能在nodejs中做到这一点?我应该使用webworker-线程吗?我在正道上吗?为此,我应该更好地使用Java(Grails/Spring)吗?我非常喜欢nodejs的简单性(对于http客户端,..)

希望有人能给我希望,我在正确的道路上。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-08 03:51:45

我只会使用节点簇。使用集群,主服务器可以创建多个工作人员,这意味着您的cron不会阻止传入请求。只要确保只有一个工人在做Cron。

我以前从未使用过节点-cron,但我有使用SyncedCron的经验。但应该是一样的。

对于http客户机,有很多库可以这样做,您可以检查请求httpclient

您的代码应该如下所示:

代码语言:javascript
复制
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...........

} 

注意:

  1. 要使大师复活,请使用类似于"永远“的内容
  2. 您的服务器应该有多个核心,至少有4个,但我推荐更多(可能是8个?)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38258024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档