GRPC 如何处理出现多次的指针?
Posted
技术标签:
【中文标题】GRPC 如何处理出现多次的指针?【英文标题】:How GRPC handle pointer that appear more then once? 【发布时间】:2020-12-29 06:29:29 【问题描述】:例如(golang):
type
Product struct
Name string
Customer struct
Name string
Products []*Product
正确的行为是:
GRPC
尊重 *Product
指针并仅传输一次。
GRPC
将传输相同的 *Product
的次数与关联到不同的 Customer
的次数相同。
【问题讨论】:
This answer 提供了两条信息:首先,protobuf 本身(底层序列化方法)是一个 tree 序列化器 - 因此它不是 通过只序列化一次对象来处理对对象的重复引用,在另一端具体化一个图。但是,其次,protobuf 的特定 .NET 实现提供了图形序列化作为选项。在 golang protobuf 或 golang grpc 实现中寻找它作为一个选项;它可能在那里。 (或者也许不是。) 【参考方案1】:迈克尔,
您的消息不清楚,但我假设您会将Customer
作为请求的一部分发送到 gRPC 服务器。
Golang 会将结构编组为 []byte
(https://godoc.org/github.com/golang/protobuf/proto#Marshal),因此消息不会有指针之类的东西。这将只是一个编码的消息。 (看
https://github.com/golang/protobuf/blob/master/proto/wire.go#L22)。
gRPC 不是 Golang 的东西,所以一边(例如服务器)上的指针并不意味着它必须是另一边(例如客户端)上的点。
最后,回答你的问题,预期的行为是2
。 不过,您可以深入了解 proto buff 序列化 (https://developers.google.com/protocol-buffers/docs/encoding)。我不知道它是如何工作的,但是可能消息被压缩了,所以重复的[]bytes
可能会被丢弃。
【讨论】:
以上是关于GRPC 如何处理出现多次的指针?的主要内容,如果未能解决你的问题,请参考以下文章