访问节点中长时间运行的进程的grpcstreamvariables

我正在使用Node.js连接到使用执行长时间运行任务的gRPC的服务器。

在进行作业时,服务器将单向stream发送到客户端(Node.js应用程序)。 我需要实现一个停止button,并告诉closuresgRPCstream将停止正在进行的工作。

这是目前我的代码:

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(); }); 

正如你所看到的,我在创build作业时向客户端发送HTTP 202响应,并在后台asynchronous继续。

问题:

  1. 如何closuresstream?
  2. 如何访问lengthyOperationvariables来执行此操作?

lengthyOperation对象有一个cancel方法来取消调用。 所以,当你想停止stream,只需要调用lengthyOperation.cancel()

请注意,当你这样做,它会导致呼叫以错误结束。 我会build议添加一个lengthyOperation.on('error', ...)处理程序来处理该错误。