如何将尾随元数据从 python gRPC 服务发送到 grpc-web 客户端?
How to send trailing metadata from python gRPC service to grpc-web client?
我正在尝试将尾部元数据从 python gRPC 服务发送到 grpc-web 客户端。但是客户端收不到。
我正在使用 envoy 代理服务器将 grpc-web 与 python gRPC 服务连接。
为了发送元数据,我使用了这种方法:
class Greeter(helloworld_pb2_grpc.GreeterServicer):
def SayHello(self, request, context):
context.set_trailing_metadata((
('checksum', 'I agree'),
('retry', 'false'),
))
return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name)
在客户端上,我尝试以这种方式访问元数据:
var call = greeterService.sayHello(request, {}, function(err, response) {
if (err) {
console.log(err.code);
console.log(err.message);
} else {
console.log(response.getMessage());
}
});
call.on('status', function(status) {
console.log(status.code);
console.log(status.details);
console.log(status.metadata); // here should arrive metadata
});
我将按照文档中的描述发送它。但是没有到达元数据。
有人遇到过这样的问题吗?
在使用相同的 medatdata 键但任何值调用方法 set_trailing_metadata
, you need to call send_initial_metadata
之前。
在我的例子中,它看起来像这样:
class Greeter(helloworld_pb2_grpc.GreeterServicer):
def SayHello(self, request, context):
context.send_initial_metadata((
('checksum', ''),
('retry', ''),
))
context.set_trailing_metadata((
('checksum', 'I agree'),
('retry', 'false'),
))
return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name)
其实我无意中找到了这个解决方案。
我假设您需要在初始元数据中指定 headers names,然后您才应该在尾随元数据中设置 headers values 然后特使可以正确打包并通过 HTTP 1.1 传送。
我正在尝试将尾部元数据从 python gRPC 服务发送到 grpc-web 客户端。但是客户端收不到。
我正在使用 envoy 代理服务器将 grpc-web 与 python gRPC 服务连接。
为了发送元数据,我使用了这种方法:
class Greeter(helloworld_pb2_grpc.GreeterServicer):
def SayHello(self, request, context):
context.set_trailing_metadata((
('checksum', 'I agree'),
('retry', 'false'),
))
return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name)
在客户端上,我尝试以这种方式访问元数据:
var call = greeterService.sayHello(request, {}, function(err, response) {
if (err) {
console.log(err.code);
console.log(err.message);
} else {
console.log(response.getMessage());
}
});
call.on('status', function(status) {
console.log(status.code);
console.log(status.details);
console.log(status.metadata); // here should arrive metadata
});
我将按照文档中的描述发送它。但是没有到达元数据。
有人遇到过这样的问题吗?
在使用相同的 medatdata 键但任何值调用方法 set_trailing_metadata
, you need to call send_initial_metadata
之前。
在我的例子中,它看起来像这样:
class Greeter(helloworld_pb2_grpc.GreeterServicer):
def SayHello(self, request, context):
context.send_initial_metadata((
('checksum', ''),
('retry', ''),
))
context.set_trailing_metadata((
('checksum', 'I agree'),
('retry', 'false'),
))
return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name)
其实我无意中找到了这个解决方案。
我假设您需要在初始元数据中指定 headers names,然后您才应该在尾随元数据中设置 headers values 然后特使可以正确打包并通过 HTTP 1.1 传送。