gpt4 book ai didi

go - 客户端的 gRPC 上下文

转载 作者:IT王子 更新时间:2023-10-29 01:26:20 26 4
gpt4 key购买 nike

我正在使用 gRPC 和 protobuf(以及通往 REST 的 gRPC 网关)在 go 中构建客户端/服务器系统。

我使用 metadata在服务器端的上下文中从客户端携带身份验证数据,并且效果很好。

现在,我希望服务器设置一些元数据键/值,以便客户端可以获取它们以及响应。我怎样才能做到这一点?使用 SetHeaderSendHeader ?理想情况下,我希望服务器的每个响应都集成该元数据(可以看作某种 UnaryInterceptor ,但在响应而不是请求上?)

这是 server 的代码和 client .

最佳答案

我终于找到了路:https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md

所以基本上,grpc.SetHeader() + grpc.SendHeader()grpc.SetTrailer() 完全是我想要的为了。在客户端,grpc.Header()grpc.Trailer() 函数需要传递给RPC调用,它们的参数是一个元数据。 MD 待填充的对象。

在客户端,定义您的接收元数据:

var header, trailer metadata.MD

然后,将其传递给 SomeRPCCall() 一元 RPC:

response, err := client.SomeRPCCall(
context.Background(),
proto.MyMessage{},
grpc.Header(&header),
grpc.Trailer(&trailer),
)

现在,您可以检查元数据中的内容:

for key, value := range header {
fmt.Printf("%s => %s", key, value)
}

for key, value := range trailer {
fmt.Printf("%s => %s", key, value)
}

在服务器端,您可以:

  • 强制在收到 RPC 后立即发送数据(但在处理之前):

    grpc.SendHeader(ctx, metadata.New(map[string]string{"my-key": "my-value"}))

  • 或在 RPC 过程结束时设置并发送元数据(连同 Status):

    grpc.SetTrailer(ctx, metadata.New(map[string]string{"my-key": "my-value"}))

关于go - 客户端的 gRPC 上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47599509/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com