gpt4 book ai didi

node.js - 获取 Kue 作业的结果并通过开放连接将其推送给客户端

转载 作者:可可西里 更新时间:2023-11-01 09:45:49 27 4
gpt4 key购买 nike

我有一个 API 端点,它提供来自 MongoDB 的一些 JSON。就像这样:

router.get('/api/links', function (req, res) {
// Find existing links
links.find({ feed: 1 }, function (err, links) {
res.json(links)
})
})

我希望这个端点触发一个 Kue 作业,当这个作业完成时,我想以某种方式将作业的结果(数据库中的新链接)推送到客户端 –类似于 Twitter 流 API,它保持开放的 HTTP GET 请求。

router.get('/api/links', function (req, res) {
// Find existing links
links.find({ feed: 1 }, function (err, links) {
res.json(links)
})
// Kue job to update the links database
jobs.create('update subscriptions', {
title: req.user.username,
feeds: feeds
}).save()
// When the job is done, the new links in the database (the output
// of the Kue job) should be pushed to the client
})

但是,我不确定如何获得 Kue 作业的结果,也不确定在作业完成后我应该如何将新收到的数据推送给客户端。

如果无法获得 Kue 作业的结果,我只能查询数据库以获取新文档。但是,我仍然不确定如何向客户端发送另一个响应。希望有人能指出我正确的方向!

最佳答案

实际上这在文档中有所介绍 - https://github.com/LearnBoost/kue

“工作事件”

特定于作业的事件通过 Redis 发布订阅在作业实例上触发。目前支持以下事件:

  • failed 作业失败
  • complete 作业已完成
  • promotion 作业(延迟时)现在排队
  • progress 作业的进度,取值范围为 0-100例如,这可能类似于以下内容:

    var job = jobs.create('video conversion', {

    title: 'converting loki\'s to avi'
    , user: 1
    , frames: 200

    });

    job.on('complete', function(){
    console.log("Job complete");
    }).on('failed', function(){
    console.log("Job failed");
    }).on('progress', function(progress){
    process.stdout.write('\r job #' + job.id + ' ' + progress + '% complete');
    });

请记住,您的工作可能不会立即处理(取决于您的队列),因此客户可以等待一段时间以获得结果。

编辑:如评论中所述,作业不会返回任何结果,因此您应该将结果与作业 ID 一起存储在数据库中,并在作业完成时查询数据库。

为了保持连接打开,使用 res.writeres.end 而不是结束连接的 res.json (您必须自己JSON.stringify 数据)。另外,请记住,如果这花费的时间太长,浏览器可能会超时。

关于node.js - 获取 Kue 作业的结果并通过开放连接将其推送给客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15375126/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com