3

私のアプリは、Kueを使用して要求をキューに入れます。これはworker.js、ジョブが Proximo を介して行う要求を送信する必要があるため、によって処理されます。少し混乱します。しかし、このため、ジョブの結果をユーザーに返すことができません。以前は、ジョブがres.send(results)データを取得し、ユーザーがデータを取得していました。

Kue'ed ジョブで結果をユーザーに送り返すには、どのような方法が最適でしょうか? 現時点で考えられる唯一の方法は、Web フックを使用することですが、これは最も効率的な方法ではなく、ユーザーとデータの間に壁ができてしまいます。

4

1 に答える 1

5

これが私があなたがしていると思うことをするために得たコードです。

これは、URL / jobがヒットしたときにジョブを追加するだけで、実行中のワーカーが取得し、0.5秒待機して、乱数を生成するワーカージョブが作成されます。これは非socket.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);
});
于 2013-03-14T21:12:19.000 に答える