Tag: 工人

NodeJS群集模块

我正在testingNodeJS的集群模块。 我正在尝试实现以下内容: 用两个群集工作人员启动HTTP服务器。 一旦主人和工人启动,主人每5秒钟向工人发送一个“检查”信息 如果工人回应,则计数器被设置为0 如果在下一个“检查”消息之前没有消息,则计数器递增。 我检查工人是否在20秒内没有回应,然后我杀了工人,让主人开始一个新的工人。 我面临的问题是: 当我杀了工人,下一个工人进入一个重新启动,杀死,重新启动,杀死等循环,这意味着在任何时间只有一个工人是积极的,另一个工人是无反应,因为它进入一个循环。 我的代码是: var cluster = require('cluster'); var http = require('http'); var numCPUs = 2; var workerStatus = new Object(); if (cluster.isMaster) { // Fork workers. for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', function(worker, code, signal) { cluster.fork(); console.log('worker %d died (%s). […]

在NodeJS中的一个Heroku测功机上的多个工作

我有我的Procfile中定义的四个进程: web: node app.js job1: node job1.js job2: node job2.js job3: node job3.js 当我运行部署这个heroku,它旋转了四个dynos。 这些工作足够轻,可以在一台测功机上运行。 但是,我不想把所有的工作合并成一个文件。 有一个设置或什么,我可以用job2 , job2 , job3都运行在一个测功机?

在IronWorker上node.js应用程序和worker之间的通信。 如何正确轮询任务状态并接收任务响应?

申请如下: 首先,我使用一个node.js应用程序和express.js框架作为Web服务器。 在前端,当用户通过POST表单发送付款时,express.js通过“app.post”路由此任务并调用外部API进行支付。 这个API请求理想情况下应该返回用户应该redirect付款的URL。 然后,express.js应该通过'app.post'响应variables(res)redirect用户: res.redirect(307, url); 由于这个支付API请求需要一些时间,并且自从我使用Heroku以来,API请求超时并返回一个错误。 为了解决这个问题,我知道我需要在一个工人Heroku插件(根据https://stackoverflow.com/a/11438381/2859410 )上设置一个worker,比如IronWorker。 但是,我很难理解什么是正确的机制,将工作人员所做的外部API请求返回的URL传递回node.js应用程序。 为了使事情更清楚: – 用户提交付款表格。 – node.js应用程序处理POST数据并调用一个worker(“在一个worker上排队”一个任务)。 – 工作人员请求一个外部支付API,它返回一个URL。 – 工作人员应该将这个URL传回给node.js应用程序。 – node.js应用程序应该收到这个URL并redirect用户。 但是,这些操作必须是非阻塞的。 我可以想到通讯的两种select: 备选scheme1 – 当前端用户通过POST请求付款时,node.js应用程序将(通过POST)调用特定的工作人员,付款数据作为有效负载。 工作人员处理数据,请求付款API并获取付款URL。 同时,node.js执行对工作人员状态的轮询,并在接收到“完成”状态时redirect用户。 谬误:这里的困难是以asynchronous的方式进行不间断的轮询。 因为我需要将用户redirect到付款url,所以我需要在“app.post('/ form',function(req,res){”方法,这样我可以将响应(“res “)来redirect用户,为此,我看了一下async.whilst(test,fn,callback),但是我不知道如何使用同步的testing函数,我的直接想法是testing函数发出状态请求和redirect用户的callback函数,但是这个testing函数是一个asynchronous操作(例如使用'request'模块)。 scheme2 – 工作人员还接收付款数据作为有效负载,处理数据,请求付款API并获取付款URL。 完成后,它通过HTTP请求将URL传回给node.js应用程序。 谬论:我如何将传递回node.js应用程序的URL绑定到请求付款的用户? 在我的理解中,具有付款URL的HTTP请求将具有比POST路由forms更独立的路由。 换句话说,这样我就不能在“app.post('/ orderform',function(req,res){”方法,因此将不能使用响应variables(“res”)redirect用户。 Tha node.js应用程序的结构如下: app.post('/order', function(req, res) { // user data on req.body // process data […]

如何在NodeJS中创build和pipe理工作进程?

例如,假设用户请求处理一些audio文件,那么nodejs当然不能进行紧张的处理,所以它应该将其卸载到工作进程中。 这些工作人员可能需要能够发布/订阅事件,在死亡时重新生成,队列应该能够负载均衡,维护caching并保持活跃状态​​。 我已经看到了0MQ,其他人喜欢它,但我不知道如何将它集成到一个Web应用程序… 什么是创build和pipe理这些工作stream程的行业标准方法? 什么是使用的工具? 编辑:还有一件事:说audio处理需要很长时间,请求超时。 除了增加超时外,还有什么办法可以解决吗? 编辑2:由工人,我的意思是像Heroku工人dynos – 他们如何工作?

如何在Windows上运行节点群集?

任何人都知道如何在Windows上运行节点群集? 我一直没有find网上的任何文章,似乎无法解决这个问题: events.js:160 throw er; // Unhandled 'error' event ^ Error: write ENOTSUP at exports._errnoException (util.js:1007:11) at ChildProcess.target._send (internal/child_process.js:634:20) at ChildProcess.target.send (internal/child_process.js:521:19) at sendHelper (cluster.js:751:15) at send (cluster.js:534:12) at cluster.js:509:7 at SharedHandle.add (cluster.js:99:3) at queryServer (cluster.js:501:12) at Worker.onmessage (cluster.js:449:7) at ChildProcess.<anonymous> (cluster.js:765:8) 而代码… if (cluster.isMaster) { for (let i = 0; i < numCPUs; i++) […]