【问题标题】:grpc client not receiving server streamed datagrpc客户端不接收服务器流数据
【发布时间】:2021-07-19 04:37:26
【问题描述】:

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

鉴于我的 proto 文件。

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!

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

【问题讨论】:

    标签: javascript node.js grpc


    【解决方案1】:

    我成功匹配消息中给出的确切成员名称 SHA256Info

    所以而不是

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

    正确的返回值应该是

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

    这是消息结构

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      相关资源
      最近更新 更多