1

我目前正在使用 express js 开发 API。我想编写一个函数,将分析保存在 DB 中,但我应该能够以火灾和忘记的方式调用该函数。该函数应该接受参数并完成它的工作。这应该像一个单独的线程一样工作,并且当前代码执行不应该等待它的响应。例如 Akka Actors 在 Java 中的工作方式。有人可以建议一种方法或一些链接来参考吗?

4

2 回答 2

2

Node is async by default. Just send your response outside of the db query callback:

app.get("/ping", function (req, res) {
    // fire
    dbConnection.query("UPDATE analytics SET count = count + 1", function(err, result) {
        // forget
    });

    res.send("Pong");
});
于 2016-01-11T08:05:56.880 回答
1

您可以将您的信息添加到某种 MessageQueue,然后启动另一个进程,该进程将侦听 MQ 并相应地处理消息。

这并不是 Actor 的具体工作方式,但这就是通常在 nodejs 领域中的工作方式。

例如,您可以使用kueAWS SQSGoogle PubSub或任何其他可用的解决方案

// example with kue
// http-process.js
var kue = require('kue');
var queue = kue.createQueue();

... 
app.post('/something-somewhere', (req, res) => {
  var job = queue.create('event', {
    data: 'analytics, data',
    median: 5.3,
  }).save( function(err){
    if( !err ) return next(err); 

    res.send('ok');
  });
});

// event-processor.js
var kue = require('kue');
var queue = kue.createQueue();

queue.process('event', function(job, done){
  someKindOfORM.myEventsTable.insert({
    job.data
  }).notify(done);
});
于 2016-01-11T07:41:26.110 回答