【发布时间】:2019-11-04 18:58:24
【问题描述】:
我想了解 gRPC 如何使用 HTTP2 发送流消息?链接https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md 说,
“Length-Prefixed-Message 项的重复序列在 DATA 帧中传递”
读完这句话我的理解是,每个(protobuf)消息都被gRPC封装在一个HTTP2 Data Frame中并发送过来。如果是这样,那么gRPC为什么需要在消息中附加长度前缀,它不能简单地读取完整的Data Frame Body并假设它是一个完整的消息吗?
我在这里错过了什么?
【问题讨论】:
-
在这里完全猜测,我会假设这是在流模式(不是一元模式,即 protobuf DSL 中的
stream)和缓冲时启用(写入选项),可以在单个 HTTP/2 数据帧中传递多个数据元素。 -
此外,您链接的文档指出“数据帧边界与长度前缀消息边界无关,实现不应对其对齐做出假设。” - 这表明即使是单个数据消息也可以最终拆分为多个 HTTP/2 数据帧,它决定如此。
-
谢谢你的解释。
标签: protocol-buffers grpc http2 grpc-java