内容简介:[╮(╯_╰)╭一个小故事]从前有两个程序员,一个叫李狗蛋一个叫二狗子,正在启动一个 web 项目。李狗蛋说我们系统交互就用HTTP听我的准没错。二狗子说,为什么我们不用RPC呢听我的准没错?李狗蛋说凭什么要听你?二狗子说那凭什么要听你的?李狗蛋说老子说用HTTP就用HTTP老子天下第一。二狗子脸无表情说了一声,滚。风。
[╮(╯_╰)╭一个小故事]
从前有两个程序员,一个叫李狗蛋一个叫二狗子,正在启动一个 web 项目。李狗蛋说我们系统交互就用HTTP听我的准没错。二狗子说,为什么我们不用RPC呢听我的准没错?李狗蛋说凭什么要听你?二狗子说那凭什么要听你的?李狗蛋说老子说用HTTP就用HTTP老子天下第一。二狗子脸无表情说了一声,滚。
风。
风吹。
空调风吹。
冷冽的空调风挡不住他们之间对于技术的热情,他们。。。打起来了。
看他们打架其实我挺....挺饱的,毕竟搬了板凳吃了很多西瓜,有点撑。但他们好像吵架的前提都没整明白,HTTP跟RPC的区别都没整清楚。希望你们不要因为这玩意吵架了,阿弥陀佛,毕竟太多人肚子撑不好。
[╮(╯_╰)╭HTTP和RPC的区别]
HTTP,Hypertext Transfer Protocol,超文本传输协议,是一款网络传输协议。
RPC,Remote Procedure Call,远程方法调用,是一款服务调用方案。
一个是协议一个是方案,这两者没什么必然的关系,所以也没什么可以比较的。
为什么会有人拿他们来比较呢?
是因为,现在有着 SpringCloud为首的HTTP restful 风格的调用模式,也有着grpc等这类私有协议的调用方式。所以自然而然,会有很多人从这个层次上认为,他们是同一类东西,其实并非如此。
二者本质都是希望得到服务,而被创造出来的技术。
[╮(╯_╰)╭HTTP究竟是什么]
HTTP 全名叫超文本传输协议,是在互联网中用来传输大量信息(比如文本、声音、视频等)的一个协议,这个模式是C/S 模式,也就是客户端(一般是浏览器)用HTTP发起请求,服务端接收到请求后同样用HTTP响应请求。HTTP是不是互联网本身呢?明显不是。互联网始于1969年美国的阿帕网,而HTTP1.0在1996年才开始使用,也是在这一年,以浏览器技术为基础的我们认知的互联网,开始蓬勃发展。一图胜百言,我就不多介绍了。
HTTP请求交互:
一次 HTTP 请求
客户端:你准备好我要发送了啊。
服务端:好吧你发送吧。
客户端:你真的准备好我真的要发送了啊。
客户端:发送请求。
服务端:响应请求。
客户端:你准备好我要关闭了啊。
服务端:好吧你关闭吧。
服务端:我关闭连接了。
客户端:好的我知道你关闭了。
[╮(╯_╰)╭RPC究竟是什么]
RPC 全名叫 远程过程调用,是指在调用远程服务的时候,用本地调用的方式,本地的处理器屏蔽了所有的网络、异常、重试等细节,服务调用方只关注输入值和返回的服务,相当于一个代理。之前讲过一次了,不多说了。 企业神奇中间件-RPC(总览) No.97
[╮(╯_╰)╭ HTTP和RPC开始PK了 ]
Round1
用 HTTP 可以实现 RPC 吗? 能。不仅仅HTTP可以实现RPC,任何网络协议都可以用来实现RPC,只要两台机器之间网络是通的,用什么协议都无所谓。
用 RPC 可以实现 HTTP 吗? 不能。HTTP 是有国际标准滴。
Round2
HTTP可以抛弃 TCP/IP 吗?暂时不能。现在HTTP/1.1 甚至 HTTP/2.0 暂时都还是基于 TCP/IP 协议的,HTTP/3.0 有一点点可能可以解除TCP依赖。
RPC可以抛弃 TCP/IP 吗?能。还是之前的结论,只要网络是通的,什么TCP、UDP、甚至小众的网络协议都可以支持RPC的实现。
Round3
HTTP可以跨平台跨语言吗?天然支持。毕竟拿到就用嘛,都是文本。
RPC可以跨平台跨语言吗?需要一定的努力,一些私有协议会把自己的序列化和反序列化给定制化了,只能自己解析自己,比如 Java 的RMI。
Round4
我能自己实现一个HTTP吗?想得有点多。国际标准来的。
我能自己实现一个 RPC 吗?小伙子有前途,可以的,写一个呗。
https://github.com/CallMeDJ/BigBanana-rpc.git
Round5
HTTP快吗?快,但是有一些头在企业应用没啥用。
RPC快吗?快,基于私有协议可以把网络传输冗余数据降到最低。
看这个厚重的头..
[╮(╯_╰)╭小结]
如果你只能记住一句话,那就记住这句吧。
HTTP是网络协议,跨平台跨语言,结合restful开发应用协作,开发很高效,但是协议头很重。RPC是调用方案,一般都会有私有协议,没什么多余信息,运行很高效,但大多数rpc的迁移性并不是很好。
HTTP就是英语,能处理非常多非常广泛的场景。RPC 就是方言,效率可能比英语高多了,但是可能有人听不懂。
[╮(╯_╰)╭后话]
关于 HTTP 和 RPC 这个话题是在大蕉的朋友们这个群里抛出来的问题,我觉得很有价值也很好玩,因为很多人的认知里,RPC就是比HTTP快。说实话,现在 gRPC 确实比 HTTP/1.1 要更快更有效率,所以大家才会觉得 RPC 就是比HTTP 快。但其实一些实现很糟糕的RPC未必比HTTP快比如大蕉自己实现的RPC。反过来说,RPC也可以基于HTTP搭建,把 HTTP 作为基础网络层。所以这两个东西并不是非此即彼的敌对关系,而是分工合作甚至相互协作的关系。
催更的小伙可以转发给我个好看了喂!!不然我就,我就生气。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。