http1.0、http1.1、http2.0、protobuf、grpc

编程入门 行业动态 更新时间:2024-10-25 02:25:57

http1.0、http1.1、http2.0、protobuf、<a href=https://www.elefans.com/category/jswz/34/1761953.html style=grpc"/>

http1.0、http1.1、http2.0、protobuf、grpc

一、http1.0、http1.1、http2.0的区别

  • 传输方面

http1.0 :       每次请求都需要建立一个新的tcp连接, 所以每次请求都需要经历tcp的三次握手四次挥手。 如果是同一个客户端发起的请求,完全不需要每次建立连接。

http1.1: 保持首次建立的那个tcp连接, 知道被通知关闭才关闭连接。这样就解决了http1.0中多次建立连接的问题。 但是http1.1的消息需要一个一个请求、响应, 如果第一个请求在服务端被阻塞了, 那么第二个请求也不会被处理, 直到第一个请求被处理完了第二个请求才会被处理(队头阻塞)。 这个也可以通过新建一个tcp连接的方式解决,但是tcp连接数有限且建立需要开销。

http2.0 :如下, http1一个请求消息和响应消息是以message为单位的, message 又是无序的, 所以需要等待上一个请求返回了下一个请求才能进行。而http2中封装了一层stream,stream有一个id作为序列号, 这样在响应的时候就可以通过对应的streamid定位到请求方。正是因为有了这个序列号,http2.0可以并发的进行发送请求,处理请求的时候也不需要考虑顺序, 只要把对应的streamid传回去就可以了。

  • 编码方面

http2.0对请求头进行了压缩和编码, 具体编码方法是使用用数字作为key,常见的请求头作为vulue,在哈希表哈希表中存储请求头, 比如静态表里面存储的是61种常见的请求头,动态表里面是存储所有后面发过来的不包含在动态表里面的请求头(包括用户自定义的token等)。压缩方式是使用静态 Huffman 编码。

二、Protobuf 如何提高编码效率? (参考17 | Protobuf是如何进一步提高编码效率的?-极客时间)

我们常用的json使用键值对的方式定义数据,非常便于查看。 但是仔细想下我们的服务在调用的时候, 其实json里面的key是不需要写得很具体的, 参考 http2.0里面对请求头的编码, Protobuf 在定义数据的时候, proto文件中将key映射为一个数字, 接收方再通过这个数字去解析这个到底是哪个key, 这样传输的时候这部分数据就不需要传输了。还有就是使用默认值的情况下不传输,对传输的数字、字符串等做压缩。

三、GRPC

18 | 如何通过gRPC实现高效远程过程调用?-极客时间

Rpc的全称是远程过程调用,需要做到以本地函数调用形式向应用开发者提供网络访问的能力,这里跟http的通信一样, 也需要实现连接的建立和数据的传输,方法有很多种,其中 grpc 是性能比较好的一种开源框架。

Grpc默认基于http2.0实现对数据的传输, 默认基于Protobuf 实现对数据的编码。

Grpc请求体报文解析:传输协议使用http2.0, 自然会对一些头部信息做压缩。

【包头】部信息有

Path:例如 “/demo.GRPCDemo/SimpleMethod”。 通过“/ 包名. 服务名 / 方法名”的形式确定了 RPC 方法

content-type : 例如“application/grpc”, 确定消息编码格式为 Protobuf。

他的路由不是根http一样放在url里面做的, 而是通过头部的path去路由的。

【包体】部分也不是直接传输protobuf数据, 而是在首部加了5个字节, 一个表示包体长度, 一个表示是否压缩过。

Grpc的响应体 :

相应的包体部分头部同样包含前5个字节的是否压缩、包体长度信息。

响应头被拆成了两部分, 将响应体包裹在中间, 这样就允许服务器在发送完消息后再给出错误码。

gRPC 中的 HTTP 头部与普通的 HTTP 请求完全一致,因此,它兼容当下互联网中各种七层负载均衡,这使得 gRPC 可以轻松地跨越公网使用。

更多推荐

http1.0、http1.1、http2.0、protobuf、grpc

本文发布于:2024-02-25 20:37:21,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1700227.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:grpc   protobuf

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!