用于 grpc-java 的 TCP 传输



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

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

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

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

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

最新更新