Узел gRPC: отправка метаданных с сервера на клиент без ошибок
Со стороны клиента легко добавить метаданные для сервера:
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.
Соответствующие ссылки:
2 ответа
ServerUnaryCall.sendMetadata(responseMetadata)
сервер:
const method = (call, cb) => {
// code
call.sendMetadata(metadata)
// code
}
клиент:
const call = client.method(params, cb)
call.on('metadata', (metadata) => {
// code
})
Похоже, вы можете использовать такой код:
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