「Backup Database」などの管理ユーティリティを小さな Web アプリに追加したいと考えています。ユーザーがボタンをクリックすると、HTTP 応答がすぐに返されますが、長時間実行される可能性のあるプロセスがバックグラウンドで開始されています。
Java では、これはおそらく独立したスレッドを生成することによって実装され、Scala ではアクタを使用して実装されます。しかし、node.js で適切なイディオムは何ですか? (コードスニペットを歓迎します)
私は今、ドキュメントを読み直しています。これは本当にノード 101 の質問のようですが、それは私がこれに取り組んでいるところです... とにかく、これが基本的なシナリオであることを明確にするために:
function onRequest(request, response) {
doSomething();
response.writeHead(202, headers);
response.end("doing something");
}
function doSomething(){
// long-running operation
}
doSomething() をバックグラウンドで実行したままにして、応答をすぐに返すようにします。
別の OS レベルの ChildProcess を生成しないと不可能と思われるノードのシングル スレッド モデルを考えると、わかりました。私の誤解。
私のコードでは、バックアップに必要なものはほとんどが I/O ベースであるため、ノードはそれを適切な非同期方式で処理する必要があります。私がやろうと思うことは、doSomething を response.end の後にシフトすることです。それがどのように動作するかを見てください。