RPC

TCP的问题

TCP三个特点:面向连接、可靠、基于字节流

关注基于字节流这一点,裸TCP收发01串之间没有边界,不知道完整消息要在哪里分割即粘包问题

所以需要加入消息头,在头部标注包长度,消息头里双方约定好的规则称为协议

所以基于TCP衍生出HTTP和RPC

HTTP和RPC

RPC:远程过程调用

rpc早于http,各种联网软件,需要在客户端上和服务器进行沟通,可以使用自家构造的RPC协议,因为只需要链接到自己公司的服务器,基于C/S架构;而浏览器则不一样,需要访问各种公司的网站,因此需要统一标准,是B/S架构上的协议

HTTP和RPC的区别

服务发现

向服务器发送请求,需要知道IP和端口,这个查找过程就是服务发现

HTTP通过域名,基于DNS服务获取对应的IP,默认80端口

RPC需要特定的中间服务去保存服务名和IP信息,比如 Consul 或者 Etcd,甚至是 Redis,想要访问某个服务就需要通过中间服务获得IP和端口信息,也可以基于DNS做服务发现的组件,比如CoreDNS

底层链接形式

http在连接之后会保持连接,keepalive,复用连接

而RPC也建立tcp连接进行长交互,除此之外还会建立连接池,在请求量大时建立多个链接放在池内,发数据时取出,用完放回

有利于提升网络性能,http也可以建立连接池

传输内容

TCP传输的信息都具有消息头和消息体

http中,使用json序列化结构体再传输,内容多,且冗余

而RPC可以支持高度定制化,采用体积更小的protobuf序列化,也可以不用考虑浏览器行为如302重定向跳转

posted on 2025-08-13 16:27  chycal  阅读(12)  评论(0)    收藏  举报