繁体   English   中英

grpc-java 的 TCP 传输

[英]TCP transport for grpc-java

grpc-java 是否有原始 TCP 传输的实现? 我需要 grpc 用于内部网络服务并且没有防火墙问题,所以我想在构建基于 grpc 的服务时避免 HTTP/2 开销。

“原始” TCP 实际上不是一个东西。 你需要在上面构建一个协议。 碰巧 HTTP/2 非常接近 gRPC 可能制定的任何专有协议。 我还要注意 gRPC 与 HTTP/2 紧密集成,因此 HTTP/2 在许多实现中被视为 gRPC 的一部分,并且可以作为一个单元进行优化。

gRPC 需要多路复用、流控制、基于字节的帧(不是基于消息)和元数据。 这基本上就是 HTTP/2 的核心所在。 您可以制定更简单的协议,但随后您会开始遇到大型消息问题,导致队列阻塞、memory 使用或频繁的 TLS 连接建立成本。

制作具有这些特性的协议是一个很好理解的问题。 HTTP/2 实际上在许多方面看起来比 HTTP/1 更类似于 TCP。 它以与 SSH-2 大致相同的方式解决了这些问题。

选择 HTTP/2 的“损失”很小。 grpc 中使用的所需标头之类的东西,例如方法名称和状态代码,不能作为结构而不是通用元数据直接优化到协议中。 但是 HPACK 可以帮助一些人。 原生二进制标头非常好,可以避免使用 base64 编码元数据,尽管通过 SETTINGS 协商扩展 HTTP/2 以支持它相对容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM