1

私は現在、express js で API を開発しています。アナリティクスをDBに保存する関数を書きたいのですが、その関数をファイアアンドフォーウェイで呼び出すことができるはずです。関数はパラメーターを受け入れ、その作業を行う必要があります。これは別のスレッドのように機能する必要があり、現在のコードの実行はその応答を待機するべきではありません。たとえば、Akka アクターが Java で動作する方法です。誰かがそれを行う方法や参照するリンクを提案できますか?

4

2 に答える 2

2

ノードはデフォルトで非同期です。応答を db クエリ コールバックの外に送信するだけです。

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 をリッスンし、それに応じてメッセージを処理する別のプロセスを起動できます。

特にアクターがどのように機能するかということではありませんが、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 に答える