首先,‘已经有了http,为何还要有rpc’这是个很明显的错误问题,根据维基百科我们可以很清楚的查到 rpc(Remote Procddure Call)首次出现在1976年,以“信使报”(Courier)的名义使用,而著名的http协议则是在1989年由欧洲CERN发起,1999年发布RFC 2616 定义了http1.1。所以正确的问法应该是“已经有了rpc,为什么还需要http?”
这其实是一个历史问题了,在最初的时候软件大多是C/S架构各个厂商的软件只需要连接自家的服务器就够了,在这种client to server 的模式下rpc 就很方便了,但是有一个特殊的软件浏览器却不同,浏览器不仅需要访问自家的服务器,还需要访问其它家的服务器,这就是B/S架构。在B/S架构的模式中,需要一个统一browser server的协议,大名鼎鼎的http就是那个年代的标准协议了。
htttp协议和B/S架构的大火,rpc 也就开始逐渐走向低调,一般用于公司内部各个微服务之间的通信,而http协议则走向了前台。
其次在我本人看来 http 和rpc 协议对比,其实还有点不合适,维基百科中讲:分布式计算中,远端程序呼叫(英语:Remote Procedure Call,RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一台计算机)的子程序,而程序员就像调用本地程序一样,无需额外地为这个交互作用编程(无需关注细节)。RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。
但是将RPC和传统的应用层协议http来做对比是不妥当的,在我本人看来 rpc更像是一种标准一个分类,所有符合其标准的都可以成为rpc。当前较为流行的几种rpc 协议大部分使用tcp 或者udp 来实现,但是大名鼎鼎的gRPC则采用的是http2.0。