3

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

让 Kue'ed 工作将结果发送回用户的最佳方法是什么?目前我能想到的唯一方法是使用网络钩子,但这不是最有效的方法,它在用户和他们的数据之间建立了一堵墙。

4

1 回答 1

5

这是我要做的我认为你正在做的代码。

简单地说,这只是在 url /job 被命中时添加一个工作,一个工作工作被创建,正在运行的工作人员拿起,等待半秒并生成一个随机数。这是非 socket.io 版本。你可能不应该这样做,但它确实有效。

网络服务器(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);
});
于 2013-03-14T21:12:19.000 回答