[╮(╯_╰)╭一个小故事]

从前有两个程序员,一个叫李狗蛋一个叫二狗子,正在启动一个 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 作为基础网络层。所以这两个东西并不是非此即彼的敌对关系,而是分工合作甚至相互协作的关系。

催更的小伙可以转发给我个好看了喂!!不然我就,我就生气。

李狗蛋和二狗子因为HTTP or RPC打起来了No.135相关推荐

  1. 【MySQL】记一次线上重大事故:二狗子竟然把线上数据库删了!!

    写在前面 估计二狗子这几天是大姨夫来了,心情很郁闷,情绪也很低落,工作的时候也有点心不在焉.让他发个版本,结果,一行命令下去把线上的数据库删了!你没听错:是删掉了线上的数据库!运营那边顿时炸了锅:怎么 ...

  2. 第一次亲密接触——二狗子初识 CDN

    二狗子是国内知名XXX大学的在校学生,作为一名编程爱好者,他利用业余时间搭建了一个网站,把平时的学习心得和技术分享全都 PO 在自己的网站上.渐渐地,二狗子的网站因为文章质量高,技术分享全面,受到了很 ...

  3. 你有没有遇到叫二狗子的那个哥们?

    原文 调侃C中的define,CSDN同步发布. 转载请注明出处,谢谢! 二狗子 二狗子这个名字,在大街小巷,在电视剧中几乎都能听到.我也不知道老一辈的父母为什么这么喜欢给自己的孩子取这样的名字,唯一 ...

  4. 二狗子的志愿者故事20210121

    我们都是打工人·二狗子的志愿者故事20210121 二狗子是我的大学朋友,今年他在他们村做志愿者,其中有些许工作挺有趣的,也便给我讲来听了. 目录 背景 分析 实验环境 实验步骤 实验总结 背景 小庄 ...

  5. 记一次线上重大事故:二狗子竟然把线上数据库删了!!

    推荐阅读: 这套Github上40K+star学习笔记,可以帮你搞定95%以上的Java面试 毫不夸张的说,这份SpringBoot学习指南能解决你遇到的98%的问题 最全面试题新鲜出炉:70+算法题 ...

  6. 【Spring注解驱动开发】二狗子让我给他讲讲@EnableAspectJAutoProxy注解

    写在前面 最近,二狗子入职了新公司,新入职的那几天确实有点飘.不过慢慢的,他发现他身边的人各个身怀绝技啊,有Spring源码的贡献者,有Dubbo源码的贡献者,有MyBatis源码的贡献者,还有研究A ...

  7. 用废旧纸箱 DIY 智能宠物喂食器!旅行在外远程投喂“二狗子”

    国内起起伏伏的疫情总算进入稳定期,但还是时不时爆出确诊的新闻,尤其是境外输入的病例. 长期不在家或者旅行的时候,最担心的莫过于留在家里的主子.疫情让我关注起了宠物喂食器,这种设备适合比较懒的人,设置好 ...

  8. 开店没有客流量怎么办?二狗子告诉你

    大家好,我是小花❀ 从去年开始,我就发现周围的朋友都在做微商,还挺赚钱的 于是我就想,人家都能做微商赚钱,我咋不做个试试呢 后来和剧情一模一样,我也开始了微商之路... 但是,卖点啥好呢? 考察了几天 ...

  9. 夜空中最靓的二狗子是如何让 HTTPS 快上加快的?

    二狗子是某不知名网站的站长,他热衷于通过博客分享日常的一些工作.生活.技术等,立志要成为夜空中最靓的仔. 但是前段时间有几个用户反馈,网站总是莫名会跳转到一个 xx 网站,除此之外访问速度也有点慢.作 ...

最新文章

  1. 如何识别架构方案是否合理
  2. professor‘s great paper in multi agent system
  3. kotlin将对象转换为map_Kotlin程序将哈希映射(HashMap)转换为列表(List)
  4. 服务器内存会显示ecc么,服务器内存ecc
  5. 谈谈你对oracle,对Oracle的优化
  6. 前端—每天5道面试题(十一)
  7. 使用Hexo+Github一步步搭建属于自己的博客(基础)
  8. 网页嵌套:一个html嵌套到另一个html中
  9. altium 快速设置网络_通过加载CAD“快速选择”插件,可以很大的提高绘图效率...
  10. 深信服 AC上网 行为管理设置
  11. assimp android build,Windows环境下编译Assimp库生成Android可用的.so文件
  12. 架构师须知概念:POJO、PO、DTO、DAO、BO、VO
  13. 毕业论文选题之开题报告
  14. MacOS下AndroidStudio无法启动
  15. 介绍一个牛人的机器学习PPT
  16. 手机幻灯片html代码,html5手机幻灯片制作手指滑动触屏手机幻灯片代码
  17. vue简单购物车结算计算总价
  18. which在C语言用法,A,B, and C, which ... which指代的是它们三个还是只有C呢?
  19. Mac系统安装软件的三种方式
  20. 副连长是什么级别_军改后连长工资有多少?军改后军队各级别工资待遇标准

热门文章

  1. 【小技巧】Linux安装matlab教程
  2. 单片机设计资料,仿真、程序、原理图收集好资料分享,stm32、8086、单片机方案
  3. S5PV210 WM8960 ASOC 移植
  4. LM2576在嵌入式系统中的应用
  5. 用python画枫叶-python-函数及练习
  6. 下拉框滑动穿透页面-曲线救国
  7. shell变量的定义
  8. Web开发技术的演变
  9. LeetCode 826 Most Profit Assigning Work
  10. 计算机打印机提示无法打印,打印机无法打印_打印机无法打印怎么办【步骤|图文教程】-太平洋IT百科...