Tag: 工作者

NodeJS集群:如何减less主人的数据?

我是新的nodejs,我想要的是从数据库和计算读取数据。为了使其更快,我使用nodejs集群模块。 有两个全局variables:pairMap和nameSet,我把这个作业分配给master进程中的worker,他们做一些计算工作(修改map和set,就像map-reduce一样) 然而, 似乎pairMap和nameSet没有被修改并且是空的。 (在doMasterAction中的代码) (另一个奇怪的是我控制数据,它做了修改,但最终,在主进程中返回到空)。 数据如下(我提取主要思想): const Promise = require('bluebird'); const cluster = require('cluster'); const numCPUs = require('os').cpus().length; const fs = Promise.promisifyAll(require('fs')) const utils = { mergeMap:(source,dest)=>{ for(let [key,value] of Object.entries(source)){ if(!dest.has(key)) dest.set(key,value); for(let [type,arr] of Object.entries(value)){ const final = new Set([…dest.get[key][type],…arr]) dest.get[key][type] = final; } } } } /** * key: name1@group.com||name2@group.com * […]

工人是否可以将消息发回给制作人

我有一个NodeJS应用程序,出现以下情况:我收到来自用户的请求来计算需要使用非常复杂的math公式的内容。 目前,我运行这个整个过程,找出价值,然后发回给用户。 不幸的是,这不是非常asynchronous友好:) 我想要做的是在后台运行这个整个操作,一旦任务完成,工人回到我的计算值,然后发回给用户。 我一直在寻找各种各样的工作队列,包括Kue , Celery , Resque和Beanstalk ,但是他们都没有提供这个function。 他们在发送电子邮件或运行任何不需要接收某种价值的工作方面工作的很好,只是简单的成功与否,但似乎没有任何东西允许工作者实际上将自定义消息发送回创build该任务的原始生产者。 我说错了,上面提到的所有队列都不支持吗? 如果是这样的话,请指出我可以在哪些文档中了解如何利用此function。 否则,你可以指向我的其他任何支持此function的人吗?

触发Heroku工人

在Heroku中触发一个工作进程的方法是什么? 特别是一个需要的时候很less需要的过程,比如bluemoon.js 。 每秒轮询一次读取任务队列(可以存储在数据库中)是我能想到的方法。 对于这种情况, 触发器对我来说更有意义。 有没有办法在需要时直接触发一个工作进程? 还是经常投票没有真正的缺点?

nodejs – 群集中工作人员的最佳数量

在多核处理器上对nodej进行聚类时, 我通常会看到一些例子 , const numCPUs = require('os').cpus().length; for (let i = 0; i < numCPUs; i++) { cluster.fork(); } 我的问题是 – 如果一个多核处理器正在运行一个反向代理终止ssl(cpu密集型),gzip(cpu密集型)以及其他东西的networking应用程序,还有其他服务器正在执行主要nodejs服务器的cpu密集型工作,产生与CPU核心数量一样多的工人(对于主节点服务器)? 应该运行什么样的testing来find最佳的工人数量?

针对vsivsi / meteor-job-collection的Node.js worker在job.done()上失败:“调用方法job_jobDone时出现exception”错误:匹配错误…“

我正在编写一个Meteor应用程序,将应用程序添加到要由一个或多个外部工作人员处理的队列中。 我正在使用vsivsi / meteor-job-collection( https://github.com/vsivsi/meteor-job-collection ),当我(最初)使用基于方法的(即非外部的) Meteor应用程序内部的工作人员(排队,创build和pipe理工作)。 然而,我想要一个外部进程,即一个Node.js程序(甚至不是Meteor应用程序)来监听并随后处理张贴的作业,并且看到https://github.com/vsivsi/meteor -job-collection#quick-example (第三个代码块;“node.js Worker”) – 毕竟,这可以启用更一般的Meteor不可知的作业处理方法。 我创build了一个单独的Node.js程序,使用dpp,ddp-login和meteor-job成功地将其连接到我正在运行的Meteor应用程序,并以与我最初在Meteor应用程序中完全相同的方式启动作业监听器(当使用方法 – 但是当调用job.done()(其他工作方法似乎完美地工作)时,我得到以下莫名其妙的错误: “调用方法job_jobDone时出现exception”错误:匹配错误:失败的Match.OneOf或Match.Optionalvalidation“ 代码: var DDP = require('ddp'); var DDPlogin = require('ddp-login'); var Job = require('meteor-job'); var ddp = new DDP({ host: "localhost", port: 3000, use_ejson: true }); Job.setDDP(ddp); ddp.connect(connectCB); function connectCB(err) { if (err) throw err; var options = { […]

具有工作队列devise模式的API

我正在build立一个连接到工作队列的API,并且在结构上遇到了麻烦。 我正在寻找的是一个通过API接口的工作队列的devise模式。 细节: 我正在使用Node.js服务器和Express来创build一个接受请求并返回JSON的API。 这些请求可能需要很长时间才能处理(数据密集型),所以这就是我们使用排队系统(RabbitMQ)的原因。 因此,例如让我说,我发送一个请求到API将需要15分钟处理。 Express API格式化请求并将其放入RabbitMQ(AMQP)队列中。 下一个可用的工作人员将请求从队列中取出并开始处理。 完成后(在这种情况下15分钟)它将数据保存到MongoDB中。 …. 怎么办 ….. 我的问题是,如何将完成的数据返回给API的调用者? 调用者是一个完全独立的程序,通过类似于Ajax请求的方式与API联系。 工作人员将处理的数据保存到数据库中,但我无法推回到原来的调用程序。 有没有人有任何API的工作队列资源? 谢谢,麻烦您了。

Node.js将带有函数定义的对象发送给工作线程

所以我在Node.js的一个项目中工作,我想打开一些额外的线程来更有效地处理处理负载。 但是我正在使用带有函数定义的类,当我尝试将这些对象发送给工作线程时,对象中定义的函数就消失了,我只剩下对象中的其他字段。 有没有办法给工人发送一个对象,并保留这些function,以便在工人内部调用它们? var cluster = require('cluster'); if(cluster.isMaster){ Monster = function(species){ this.attack = function(){ console.log('CHOMP'); }; this.name = species; }; var vamp = new Monster('vampire'), worker = cluster.fork(); worker.send({'monster' : vamp}); } else{ process.on('message', function(msg) { console.log(msg.monster); //this logs "{ name: 'vampire' }" msg.monster.attack(); //TypeError: Object #<Object> has no method 'attack' }); }

Heroku为node.js工作

我从Heroku开始,我有一个Web应用程序,有一部分,需要每周运行一次(星期一最好)。 我一直在读关于工人的东西: 在这里 , 在这里 , 在这里 …但我仍然有许多疑问: 1)这个工人在没有严格控制的背景下运行,不能按计划每周运行一次。 还是我错了? 如果我错了,我该如何安排呢? 2)为了使他们工作,我到底需要做什么? types web: node webApp.js worker: node worker.js 在Procfile中(其中worker.js是程序的一部分,每周只需运行一次)。 这就是全部? 没有其他的?? 太简单?? 3)最后一个…但最重要的。 “金钱的鳞次栉比”……一个工友和一个工人一样,所以如果你有一个工作站在网上,你需要为工人另外购买一个工具。 而在价格列表中,额外的代价是34.5 $(27.87€)。 它不便宜…所以我想知道我是否正确,如果你想要经营一个工人,是否有必要购买一台测功机?

workerj队列的工作?

我正在开始使用节点的集群API和mongoose为节点写一个工作队列。 我注意到有很多libs已经这样做,但使用redis和fork。 是否有一个很好的理由与使用群集API分叉? 编辑 ,现在我也发现这个: https : //github.com/xk/node-threads-a-gogo – 太多的select! 我宁愿不添加redis,因为我已经使用了mongo。 另外,我的要求是非常宽松的,我想要坚持,但可以没有它的第一个版本。 问题的第二部分:今天最稳定/使用的nodejs工作队列库有哪些?