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 如何处理出现多次的指针?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理向量指针?

如何处理指针成员的不同所有权策略?

如何处理指向通用接口的指针的 JPA 注释

进入智能指针,如何处理表示所有权?

字符串类型数组的指针运算,C++如何处理这个?

OpenCV如何处理Mat作为指针来加速代码?