首页 > 解决方案 > 为什么 gRPC 使用长度前缀消息?

问题描述

我想了解 gRPC 如何使用 HTTP2 发送流消息?链接https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md说,

“长度前缀消息项的重复序列在数据帧中传递”

阅读此声明我的理解是,每个(protobuf)消息都由 gRPC 封装在 HTTP2 数据帧中并发送过来。如果是这样,那么为什么 gRPC 需要将 Length Prefix 附加到消息中,它不能简单地读取完整的 Data Frame Body 并假设它是一个完整的消息吗?

我在这里想念什么?

标签: protocol-buffersgrpchttp2grpc-java

解决方案


缺少的部分是不能保证一个 DATA 帧只包含一个 gRPC 消息。gRPC 消息是一个更高层的流,用作 HTTP/2 的有效负载。它可能以您在官方 gRPC 库中描述的方式实现,但就协议而言,接收具有多个 gRPC PDU 的某些 DATA 帧是完全有效的。


推荐阅读