前言
​ 什么是协议?协议可以认为是一种语言,是一种交互的标准。比如A和B互相发手机短信。A和B必须互相知道对方手机号(IP地址),知道手机号后,全部使用汉语(协议)即可互相通信。
​ http即超文本传输协议,它是运行在TCP之上的应用层协议。http诞生之初主要是应用于WEB端内容获取。http协议简单快速,支持很多请求方法,如GET,POST等等;使用灵活,可以传输任意数据,只需要Content-Type标记即可;安全性,使用https交互,可防止数据窃取;

​ 既然http应用这么厉害,为什么还会dubbo协议?那么dubbo协议存在的意义又是什么?

报文格式不同

​ 创建socketServer,因为http是tcp之上的协议,dubbo是tcp协议进行传输,所以通过socketServer即可查看两者发送数据的区别。

 public static final Integer port = 8080;public static void main(String[] args) {try {ServerSocket serverSocket = new ServerSocket(port);Socket accept = serverSocket.accept();InputStreamReader reader = new InputStreamReader(accept.getInputStream());BufferedReader bufferedReader = new BufferedReader(reader);String str = null;while ((str = bufferedReader.readLine())!=null){System.out.println("----------");System.out.println(str);}} catch (IOException e) {e.printStackTrace();}}

启动之后,通过浏览器发送一个简单的http请求,比如http://localhost:8080/index.html?userName=123这种请求是其为常见的。

我们只是需要请求index.html,并且携带userName=123,即可发现,浏览器发送了很多数据,浏览器类型,cookie等等。

通过dubbo客户端发送一个简单的dubbo请求,比如访问com.nacos.dubbo.service.IUserService接口中的getUserInfo方法并且入参为哈哈

请求数据很明显,http协议数据量要大很多。

传输方式不同

​ http协议是应用层协议,是一种无状态协议,在交互之前需要进行tcp三次握手,握手成功之后进行数据传输。不知道大家有没有想过,http每次传输都需要三次握手么?那么本来一个页面那么多http请求都需要三次握手么?岂不是很浪费资源?

​ 在早期的HTTP/1.0中,每次http请求都要创建一个连接,而创建连接的过程需要消耗资源和时间,为了减少资源消耗,缩短响应时间,就需要重用连接。在后来的HTTP/1.1中,引入了重用连接的机制,就是在http请求头中加入Connection: keep-alive来告诉对方这个请求响应完成后不要关闭,下一次咱们还用这个请求继续交流。协议规定HTTP/1.1如果想要保持长连接,需要在请求头中加上Connection: keep-alive,而HTTP/1.1默认是支持长连接的,有没有这个请求头都行。

​ dubbo默认使用socket长连接,即首次访问建立连接以后,后续网络请求使用相同的网络通道。

总结

​ 通过如上对比,到现在dubbo存在的意义就很明显了,dubbo协议追求的是数据量小,小则快,协议的设计也符合dubbo框框架的理念,适用与内部服务之间的数据交互。安全性就没有https做的那么好,但是也不需要,毕竟dubbo协议设计的初衷就是内部使用的。

​ 既然dubbo协议适用于服务之间的互相调用。spring cloud的feign内部为什么使用http协议呢?个人认为是架构的需要吧,例如服务A是java写的,服务B是python写的。这个时候dubbo协议就跑不通了。只能用http这种标准协议来交互。

【dubbo系列】dubbo协议与http协议对比相关推荐

  1. Dubbo系列5:Dubbo协议

    1. 回顾Dubbo调用过程 我们先回顾一次调用过程经历了哪些处理步骤. 如果我们动手写简单的RPC调用, 则需要把服务调用信息传递到服务端, 每次服务调用的一些公用的信息包括服务调用接口. 方法名. ...

  2. dubbo provider异步_Dubbo支持什么协议?与SpringCould相比它为什么效率要高一些?

    推荐学习 消息中间件合集:MQ(ActiveMQ/RabbitMQ/RocketMQ)+Kafka+笔记 肝了30天,整出这份[分布式宝典:限流+缓存+通讯],秋招跳槽有望 一箭双雕!Alibaba架 ...

  3. Dubbo常用协议之Dubbo协议与Hessian协议解析

    前言 Dubbo 允许配置多协议,在不同服务上支持不同协议或者同一服务上同时支持多种协议.不同服务在性能上适用不同协议进行传输,比如大数据用短连接协议,小数据大并发用长连接协议. Dubbo协议 Du ...

  4. Dubbo 通信协议 dubbo 协议为什么要消费者比提供者个数多

    dubbo 通信协议 dubbo 协议为什么要消费者比提供者个数多 因 dubbo 协议采用单一长连接,假设网络为千兆网卡(1024Mbit=128MByte), 根据测试经验数据每条连接最多只能压满 ...

  5. Dubbo 通信协议 dubbo 协议为什么不能传大包

    dubbo 通信协议 dubbo 协议为什么不能传大包 因 dubbo 协议采用单一长连接, 如果每次请求的数据包大小为 500KByte,假设网络为千兆网卡(1024Mbit=128MByte),每 ...

  6. Dubbo RPC框架都支持哪些协议

    RPC框架分通信协议和序列化协议 Dubbo框架支持多种通信协议和序列化协议,可以通过配置文件进行修改 Dubbo支持的通信协议 dubbo协议(默认) rmi协议 hessian协议 http协议 ...

  7. Dubbo系列(一)dubbo介绍和入门

    Dubbo系列(一)dubbo介绍和入门 学习Dubbo 之前,先了解一下这几个问题: Dubbo是什么? 互联网发展的背景 Dubbo介绍 Dubbo的优势在哪里? 了解了dubbo之后,让我们从零 ...

  8. 干翻Dubbo系列第二篇:Dubbo3相对其他版本的升级

    前言 不从恶人的计谋,不站罪人的道路,不坐亵慢人的座位,惟喜爱耶和华的律法,昼夜思想,这人便为有福!他要像一棵树栽在溪水旁,按时候结果子,叶子也不枯干.凡他所做的尽都顺利 如何找到孙帅本人 本文内容整 ...

  9. 深度学习Dubbo系列(入门开篇)

    2019独角兽企业重金招聘Python工程师标准>>> 此文档为系列学习文档 这系列文档详细讲解了dubbo的使用,基本涵盖dubbo的所有功能特性.在接下来的文章里会详细介绍. 如 ...

最新文章

  1. lua菜鸟教程_Lua 环境安装
  2. More than Moore的探索
  3. asyncdata连接php,如何使用Nuxt和asyncData观察路由更改
  4. 怎么用Android做登录界面,利用Android怎么制作一个APP登录界面
  5. 首发:徐亦达教授团队最新发表的两篇机器学习论文
  6. tomcat 实现 文件共享,查看文件目录
  7. KubeEdge在国家工业互联网大数据中心的架构设计与应用
  8. python neo4j_在Python中使用Neo4j的方法
  9. [POI2009]石子游戏Kam
  10. com.sun:tools
  11. Linux局域网传输文件
  12. Flash 3D引擎比较
  13. PDF文件怎么压缩大小
  14. nginx+uWSGI+django+virtualenv+supervisor发布web服务器流程
  15. win10重装系统后,蓝牙开关消失,点击添加蓝牙或其他设备,显示无法连接
  16. PTA Python函数题 7-1 模拟乒乓球比赛 (20 分)
  17. UE4_关于Roll,Yaw,Pitch,Rotator的理解
  18. Frida Internal - Part 1: 架构、Gum 与 V8
  19. 公网访问本地内网web服务器【内网穿透】
  20. 3.python数据分析处理库pandas(学习笔记)

热门文章

  1. 女博士计算机类,女博士年薪156万入职华为!网友:美貌与智慧并重
  2. 东方联盟郭盛华引资近100亿,他到底要干什么?
  3. js点击下拉菜单申请a3_js下拉菜单语言选项简单实现
  4. c++学习论坛推荐 强力推荐
  5. C/C++ 传球游戏
  6. 【云原生之Docker实战】使用docker部署nightingale运维监控平台
  7. 一个方向——进化算法
  8. 技术人如何做高质量方案汇报
  9. 电子信息工程就业方向
  10. cmd查看网络计算机名字,cmd通过ip地址查电脑名称怎样做