Узел 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.

Соответствующие ссылки:


person treecoder    schedule 13.05.2018    source источник


Ответы (2)


ServerUnaryCall.sendMetadata (responseMetadata)

сервер:

const method = (call, cb) => {
  // code
  call.sendMetadata(metadata)
  // code
}

клиент:

const call = client.method(params, cb)
call.on('metadata', (metadata) => {
  // code
})
person da440dil    schedule 28.07.2018

Похоже, вы можете использовать такой код:

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 < / а>

person Stri FInder    schedule 14.05.2018