我目前正在快递js中开发API。我想编写一个函数来保存分析在DB中,但我应该能够以火和忘记的方式调用该函数。该函数应该接受参数并完成其工作。这应该像一个单独的线程一样工作,当前的代码执行不应该等待它的响应。例如,Akka Actors在Java中的工作方式。有人可以建议一种方法来做或者引用一些链接吗?
答案 0 :(得分:2)
默认情况下,节点是异步的。只需在db查询回调之外发送响应:
app.get("/ping", function (req, res) {
// fire
dbConnection.query("UPDATE analytics SET count = count + 1", function(err, result) {
// forget
});
res.send("Pong");
});
答案 1 :(得分:1)
您可以将您的信息添加到某种MessageQueue,然后启动另一个进程,该进程将监听MQ并相应地处理消息。
演员的工作方式并不特别,但这通常是如何在nodejs领域完成的。
例如,您可以使用kue或AWS SQS或Google 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);
});