Browsed by
分类:高可用框架

深入了解gRPC:协议

深入了解gRPC:协议

gRPC 是基于 HTTP/2 协议的,要深刻理解 gRPC,理解下 HTTP/2 是必要的。本篇文章会先简单介绍一下 HTTP/2 相关的知识,然后再介绍下 gRPC 是如何基于 HTTP/2 构建的。

HTTP/1.

HTTP 协议可以算是现阶段 Web 上面最通用的协议了,在之前很长一段时间,很多应用都是基于 HTTP/1.x 协议,HTTP/1.x 协议是一个文本协议,可读性非常好,但其实并不高效,笔者主要碰到过几个问题

parse

如果要解析一个完整的 HTTP 请求,首先我们需要能正确的读出 HTTP header。HTTP header 各个 fields 使用\r\n分隔,然后跟 body 之间使用\r\n\r\n分隔。解析完 header 之后,我们才能从 header 里面的content-length拿到 body 的 size,从而读取 body。这套流程其实并不高效,因为我们需要读取多次,才能将一个完整的 HTTP 请求给解析出来,虽然在代码实现上面,有很多优化方式,譬如
  • 一次将一大块数据读取到 buffer 里面避免多次 IO rea
  • 读取的时候直接匹配 \r\n 的方式流式解析
但上面的方式对于高性能服务来说,终归还是会有开销。其实最主要的问题在于,HTTP...阅读全文