在 Node 中访问 long-运行 进程的 grpc 流变量
Access grpc stream variable for long-running process in Node
我正在使用 Node.js 连接到使用 gRPC 的服务器,该服务器执行较长的 运行 任务。
服务器在作业进行时向客户端(Node.js 应用程序)发送单向流。我需要实现一个停止按钮,并被告知关闭 gRPC stream 将停止正在进行的作业。
这是我目前的代码:
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
变量?
lengthyOperation
对象有一个 cancel
方法可以取消调用。所以,当你想停止流时,只需调用 lengthyOperation.cancel()
.
请注意,当您这样做时,会导致调用以错误结束。我建议添加一个 lengthyOperation.on('error', ...)
处理程序来处理该错误。
我正在使用 Node.js 连接到使用 gRPC 的服务器,该服务器执行较长的 运行 任务。
服务器在作业进行时向客户端(Node.js 应用程序)发送单向流。我需要实现一个停止按钮,并被告知关闭 gRPC stream 将停止正在进行的作业。
这是我目前的代码:
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
变量?
lengthyOperation
对象有一个 cancel
方法可以取消调用。所以,当你想停止流时,只需调用 lengthyOperation.cancel()
.
请注意,当您这样做时,会导致调用以错误结束。我建议添加一个 lengthyOperation.on('error', ...)
处理程序来处理该错误。