GRPC与HTTP/3.0

弱网环境下的表现不同

GRPC是基于HTTP/2.0协议开发的,HTTP/2.0通过以下举措在性能方面有极大的提升:

  • 引出了Stream 概念,多个 Stream 可以复用在一条 TCP 连接,解决了HTTP/1.1的队头阻塞问题(在一条TCP连接上服务端对多个请求的响应只能一个一个同步的响应,即使多个请求是并发的)
  • 开发了HPACK算法压缩头部解决http/1.1的头部巨大且重复的问题
  • 将 HTTP/1 的文本格式改成二进制格式传输数据,极大提高了 HTTP 传输效率
  • 服务器主动推送

但此时HTTP2依然存在队头阻塞问题,不过此时的队头阻塞问题存在于TCP层。当发生网络丢包时,由于TCP的机制,服务端需要等丢的包重传成功后,才会再接收此次TCP连接之后的数据包。而此时,所有的请求都会被阻塞住直到丢包重传成功。

为了解决TCP层面的队头阻塞,HTTP/3.0将传输层的tcp协议换成了udp协议,如果发生丢包,只会中断一个数据流,而不是像http2一样中断了所有的数据流,解决了在弱网丢包环境下的队头阻塞问题。

通信连接建立的不同

  • 快速握手:grpc基于http2,而http2是基于tcp协议的,因此需要通过握手建立连接,而http3是基于udp协议的,意味着http3建立连接的速度是很快的。
  • 连接迁移:http3中的连接使用一个随机数,称作Connection ID 来确认通信双方的连接建立与否。因此在网络切换场景下,http3是可以做到连接无痕迁移的,用户在切换网络时不会对应用的延迟有任何感知。而http2是基于tcp的,当切网时,基于tcp的应用会首先无法正常连接,等连接超时后重新建立tcp连接,而重新握手也是需要时间的。

数据传输上的不同

  • 传输的数据都是二进制帧的结构,但http3的二进制帧会比http2的二进制帧更简洁一点。

  • http3头部压缩算法在http2的基础上做了改进,http2的静态表有61项请求头,http3扩展到了91项。

结论

基于弱网环境下http3的表现以及连接迁移的特性,http3会很适合用在移动端进行数据通信。

在连接已建立以及网络状态良好的情况下,由于http2与http3都是基于stream的,数据都是二进制帧的结构,对连接可以多路复用的,在数据传输速度上面,虽然http3在头部压缩算法方面做了相应的改进,但对于都是多路复用的通信场景,在网络通畅的情况下应该区别不大。

posted @ 2024-05-07 11:58  KbMan  阅读(55)  评论(0编辑  收藏  举报