Со стороны клиента легко добавить метаданные для сервера:
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.
Соответствующие ссылки: