grpc 客户端未收到服务器流数据

时间:2021-07-19 04:37:26

标签: javascript node.js grpc

我正在尝试通过 grpc 流式传输 nodejs 子进程输出,但一直得到空结果。

给定我的原型文件。

syntax = "proto3";

package servicePackage;

service Mobile {
    rpc sign(Empty) returns (stream SHA256Info);
}

message Empty {}

message SHA256Info {
  string signature = 1;
}

还有我的 grpc 服务器代码

function sign(call, callback) {
    const cp = require('child_process');
    var signature = "";
    let child = cp.exec('keytool -list -v -keystore android.keystore -alias android -storepass hardcodedstorepass -keypass hardcodedkeypass', { cwd: "./output" });

    child.on('exit', function (code, signal) {
        console.log('process exited with ' + `code ${code} and signal ${signal}`);
        call.end();
    });

    child.stdout.on('data', (data) => {
        if (data.includes("Certificate fingerprints:")) {
            var sig = data.substring(data.indexOf("SHA256:"));
            signature = sig;
            call.write({"SHA256Info": signature});
        }
    });

    child.stderr.on('data', (data) => {
        //console.error(`stderr:\n${data}`);
    });

}

还有我的 grpc 客户端代码

const call = client.sign({});

call.on("data", signature => {
    console.log("STREAMED data => " + JSON.stringify(signature));
})

call.on("end", e => console.log("server done!"));

我得到的结果是:

{} //<------ empty result
server done!

我的问题是我做错了什么导致空结果?

1 个答案:

答案 0 :(得分:1)

我成功地匹配了消息 SHA256Info

中给出的确切成员名称

所以代替

call.write({"SHA256Info": signature});

正确的返回值应该是

call.write({ "signature": signature });

这里是消息结构

message SHA256Info {
  string signature = 1; //<--- you should return matching structure
}