Node.js を使用して、長時間実行されるタスクを実行するgRPCを使用してサーバーに接続しています。
サーバーは、ジョブの進行中に一方向ストリームをクライアント (Node.js アプリ) に送信します。停止ボタンを実装する必要があり、gRPC ストリームを閉じると進行中のジョブが停止すると言われました。
これは現在私のコードです:
let express = require('express'),
router = express.Router(),
grpc = require('grpc'),
srv = grpc.load(__dirname + '/job_handler.proto').ns;
let startJob = (jobID, parameters) => srv.createJob(jobID, parameters);
router.post('/jobs', (req, res) => {
let lengthyOperation = startJob(jobID, parameters);
lengthyOperation.on('data', (data) => {
console.log(`Data from lengthy operation: ${data}`);
});
lengthyOperation.on('end', () =>
console.log('Lengthy operation completed');
});
res.setHeader('Location', `/jobs/${jobID}`);
res.status(202).send();
});
ご覧のとおり、ジョブの作成時にHTTP 202応答をクライアントに送信し、バックグラウンドで非同期に続行します。
質問:
- ストリームを閉じるにはどうすればよいですか?
- 変数にアクセスするにはどうすればよい
lengthyOperation
ですか?