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重定向跳转
浙公网安备 33010602011771号