2013-03-11 85 views
3

我的应用利用Kue对请求进行排队,这些请求由worker.js处理,因为我需要通过Proximo发送作业请求 - 这有点令人困惑。但正因为如此,作业的结果无法发回给用户。之前的工作将会是res.send(results),然后用户将拥有数据。Node.js Kue工作人员发送结果

将Kue'ed作业发回给用户的最佳方式是什么?我现在想的唯一方法就是使用Web钩子,但这不是最有效的方式,它在用户和他们的数据之间建立了一堵墙。

回答

5

这里是我得到的代码,我认为你在做什么。

只需在url/job命中时创建一个工作,创建一个正在运行的工作人员拾取的工作,等待半秒钟并生成一个随机数。这是nonsocket.io版本。你可能不应该这样做,但它的工作原理。

web服务器(web.js):

var port = 1337; 
var app = require('express')() 
    , server = require('http').createServer(app); 
server.listen(port); 
var fs = require('fs'); 
var kue = require('kue') 
    , jobs = kue.createQueue(); 


app.get('/',function(req,res) { 
    fs.readFile(__dirname+'/index.html',function(err,data) { 
     res.send(data.toString()); 
    }); 
}); 

var responses = {}; 
app.get('/job', function(req, res){ 
    var id = ''+Math.random(); 
    jobs.create('worker-job', { 
     title: 'worker job' 
     , res_id: id 
     , template: 'Some string to look up' 
    }).save(); 
    responses[id] = res; 
}); 

jobs.process('results',function(job,done) { 
    responses[job.data.res_id].send(job.data); 
    delete responses[job.data.res_id]; 
    done(); 
}); 

工人(worker.js):

var kue = require('kue') 
    , jobs = kue.createQueue(); 

jobs.process('worker-job',function(job,done) { 
    setTimeout(function() { 
     jobs.create('results',{ 
      title:'results job', 
      status:'complete', 
      res_id:job.data.res_id, 
      random:Math.ceil(Math.random()*10000) 
     }).save(); 
     done(); 
    },400); 
}); 
+0

感谢您的回复贾斯汀。虽然这个建议在普通页面环境中很好,但我的请求页面是JSON结果,所以我无法将JavaScript文件嵌入到该页面中。 – James 2013-03-15 09:00:33

+0

查看该代码,看看它是否适合你。 – 2013-03-15 23:56:35

+1

添加了仅有回复的版本。在之前的编辑中也有一个套接字io版本。 – 2013-03-16 00:21:24