从客户端,可以轻松地为服务器添加元数据:
const meta = new grpc.Metadata();
meta.add('xyz', 'okay');
stub.service.Rpc(request, meta, (err, response) => {
});
可以在服务器上访问以上内容:
call.metadata.get('xyz');
现在,如果我们需要将从服务器发送到客户端,我们会这样做:
const err = { code, details };
const meta = new grpc.Metadata();
meta.add('...', '...');
callback(err, null, meta);
请注意,我们传递了错误,实际响应为null
。
如何传递null
错误和非空响应以及元数据?
如果我执行以下操作,它似乎无法正常工作,因为没有错误就无法访问客户端上的元数据。
callback(null, r, meta);
// `r` is some response message
当没有错误时,gRPC规范是否明确禁止从服务器向客户端发送元数据?
此外,当我们参与其中时,我希望有人解释我们如何在Node中从服务器向客户端发送尾随与初始元数据。
相关链接:
答案 0 :(得分:1)
ServerUnaryCall.sendMetadata(responseMetadata)
服务器:
const method = (call, cb) => {
// code
call.sendMetadata(metadata)
// code
}
客户端:
const call = client.method(params, cb)
call.on('metadata', (metadata) => {
// code
})
答案 1 :(得分:0)
看起来你可以使用这样的代码:
client.someFunction().on('metadata', (meta) => { /* any code */ })
至少在v0.9.x上,您可以看到:https://github.com/grpc/grpc-node/blob/v1.9.x/packages/grpc-native-core/src/client.js#L562