访问节点中长时间运行的进程的grpc流变量

Access grpc stream variable for long-running process in Node

本文关键字:进程 grpc 变量 运行 节点 长时间 访问      更新时间:2023-09-26

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

正如您所看到的,我在创建作业时向客户端发送一个HTTP202响应,它在后台异步地继续。

问题:

  1. 如何关闭溪流
  2. 如何访问lengthyOperation变量

lengthyOperation对象有一个取消调用的cancel方法。因此,当您想要停止流时,只需调用lengthyOperation.cancel()即可。

请注意,执行此操作时,会导致调用以错误结束。我建议添加一个lengthyOperation.on('error', ...)处理程序来处理该错误。