grpc-go 上下文如何在客户端和服务器之间传输?

问题描述 投票:0回答:3

当我阅读有关 grpc-go 的源代码时,例如 grpc helloworld 示例中的

rsp, err := c.SayHello(context.Background(), &pb.HelloRequest{Name: name})
。我知道它使用 protobuf 消息发送请求和接收响应,并且它还使用
status.proto
文件中定义的 protobuf 传输错误消息。但我无法理解上下文如何在客户端和服务器之间传输。我猜它也使用 pb 消息,但我找不到它的定义位置。还是通过http2头帧传输?

grpc grpc-go
3个回答
0
投票

根据grpc的源码,它没有序列化上下文对象,所以服务器和客户端之间的上下文是不同的东西,这意味着如果你从客户端设置它,你无法从服务器获取键值。


-1
投票

不清楚上下文传输是什么意思,因为

context.Context
只是一个Go对象,没有序列化/反序列化的方法。也许您正在谈论GRPC 元数据。据我记得,他们使用 HTTP 标头作为传输。


-1
投票

客户端作为第一个参数传递的上下文与服务器接收到的上下文不同。

它们都只是本地上下文处理程序。它们帮助您的本地代码检查请求是否仍在运行。因此,如果请求由于某种原因被中断,您可能会中断进程。

© www.soinside.com 2019 - 2024. All rights reserved.