RPC和 HTTP协议

RPC 和HTTP 的区别

服务发现

  • HTTP,知道服务域名,可以通过 DNS 解析 得到 服务的IP地址,从而进行访问
  • RPC 需要一个专门的中间服务去保存服务名和IP信息(注册中心,nacos、consul),想要访问某个服务,就得同时注册到 中间服务,然后获取需要顶用服务的IP 和端口信息

底层链接形式

  • HTTP/1.1 默认在底层建立TCP 链接后,会一直保持这个链接(keep alive),后边的请求和响应回服用这条链接
  • RPC 协议,和http 相同的地方是,通过 建立TCP 长链接进行数据交互,不同的地方是,RPC 一般会再建立一个链接池,大量请求时,会建立多条链接放在链接池中。需要时,从链接池取,不需要时,放回链接池

传输内容

  • RPC 和HTTP 协议都有请求头和请求体,但是请求头里面放的内容不一致,由于请求体的数据格式不一致,请求头里面会存储请求体的解析方式,为了解决 body 的解析方式,请求体会有差异
  • 一般消息都是结构化的信息,但是 TCP 传输过程中,都是 二进制 的 01 串(计算机只认识 0,1),所以从应用层将数据传输前,将结构体转换成 二进制 ,这个过程叫做 序列化, 反过来,从传输层发送的消息是二进制的,需要将二进制的数据转换成 结构体的过程叫 反序列化
  • 一般,HTTP协议为了做到足够的通用,会在请求头中添加更多的信息,所有内容会偏多,整个消息体 会比RPC 偏大。但是不绝对,如果RPC 底层协议采用 http ,那就相反了

总结

  1. TCP 、UDP协议,是传输层协议,而 RPC 和 http 都定义了不同的消息格式,可以认为都是应用层协议

  2. HTTP协议: hyper text transfer protocol(超文本传输协议), 由于浏览器的诞生衍生出来的协议

  3. RPC 协议 : romote procedure call (远程过程调用协议),他本身不是一种协议,而是一种调用方式。 RPC 本身有很多实现方式,底层协议不一定基于TCP,可以是 UDP、http 协议

  4. 纯裸的TCP 能收发数据,但是他它是一个无边界的数据流,上层(应用层)需要定义消息格式,用于定义消息边界

  5. 历史的发展来说,RPC 其实比HTTP 出出现的时间更早, HTTP 主要用于 B/S 架构,RPC 主要用于C/S 架构,现在慢慢的有了融合的迹象。

  6. HTTP/2.0 在 HTTP/1.0 上做了优化,性能比RPC 都好

posted @ 2024-07-31 20:16  执笔成念  阅读(127)  评论(0编辑  收藏  举报