私は現在、express js で API を開発しています。アナリティクスをDBに保存する関数を書きたいのですが、その関数をファイアアンドフォーウェイで呼び出すことができるはずです。関数はパラメーターを受け入れ、その作業を行う必要があります。これは別のスレッドのように機能する必要があり、現在のコードの実行はその応答を待機するべきではありません。たとえば、Akka アクターが Java で動作する方法です。誰かがそれを行う方法や参照するリンクを提案できますか?
3521 次
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 領域では通常このように行われます。
たとえば、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);
});
于 2016-01-11T07:41:26.110 に答える