干翻Dubbo系列第十二篇:Dubbo协议介绍

文章目录

文章说明

一:Dubbo协议

1:Dubbo协议简介

2:Dubbo协议优点

3:Dubbo协议帧的组成

(一):幻数

(二):2Way

(三):event

[(四):Serilization ID](#(四):Serilization ID)

(五):status

(六):RequestID

(七):数据长度


文章说明

本文内容整理自《孙哥说Dubbo系列视频课程》,孙帅老师课程细致、全面、深入、性价比极高。B站搜孙帅suns可以找到对应的试听视频,或者直接添加老师微信号suns45与他直接联系

一:Dubbo协议

Rpc过程当中三个核心的要素就是:协议 序列化 通信方式

1:Dubbo协议简介

Dubbo协议是Dubbo定义的私有化协议。也是Dubbo默认的协议,我们在不进行任何设置的情况下Dubbo使用的协议就是Dubbo协议,默认的序列化范式就是Hessian2,当然在3.2之后的Dubbo版本切换为了FastJson2,Dubbo的默认的通信方式是Netty4。

不同的协议,支持的通信方式是不一样的。我们的dubbo协议走的是TCP层,他的通信方式就是Netty或者Mina,当我们后续将Rest协议的时候,他的序列化方式使用的就是JSON或者XML的方式了,它的通讯方式就是Jetty或者是Tomat这种服务器的通信方式。

不同的协议+序列化方式组合+通信方式对应的通信效率是天差地别的。他们对应的执行效率,也就是:响应时间、TPS和QPS也是天查地别的。

2:Dubbo协议优点

Dubbo协议最大的特点是什么呢?他是一个长链接异步通信的方式,他和我们Netty里边Futrure和Promise的情况是可以画等号的。这种情况适用于,小数据量大并发的数据调用。他不适合大数据量的服务比如:传输文件和视频。日常常规的调用,数据量比较小,兵法比较高,使用Dubbo协议是比较合适的。

3:Dubbo协议帧的组成

所谓协议帧的组成,就是协议描述了通信双方,在通信内容传输过程中达成的传输单位(帧)的约定。在这个帧的信息里边,那些是头信息,那些是体信息?实际上整个帧的结构。

不同的协议是不一样的,但是基本的内容是一致的,都包括头信息和体信息。Dubbo协议的帧信息里边,幻数,序列化方式,操作的方向性,状态信息和数据大小信息,这些内容都有,以及这些操作内容占多大的空间。

(一):幻数

幻数:幻数这个内容分为幻术高位和幻数地位,总共占据16个bit。0xdabb这是一个16进制的数字,他的作用标识了这是Dubbo协议的标准帧,有了这个标识才能被认定为这是客户端给服务端发送的一个标准的帧,他的作用就类似于Java中class文件的cafababe。

req和res占用了1bit的空间,表达的是这是请求的数据还是相应的数据,如果是请求的数据则是1,如果是响应的数据则是0,这个就代表了,咱们前边提到的操作的方向性。

(二):2Way

这个标志位只能在req是1的时候,它的含义代表了我们期望服务器给我们的返回值是有值还是没值的情况。1是有值。

(三):event

事件,这个可以告诉付服务端,我们这是一个普通的请求信息,还是心跳事件,如果是心跳事件的话,这里会是1

(四):Serilization ID

序列化协议,如果是FastJson2的话,这里应该是6.

(五):status

20 - OK

30 - CLIENT_TIMEOUT

31 - SERVER_TIMEOUT

40 - BAD_REQUEST

50 - BAD_RESPONSE

60 - SERVICE_NOT_FOUND

70 - SERVICE_ERROR

80 - SERVER_ERROR

90 - CLIENT_ERROR

100 - SERVER_THREADPOOL_EXHAUSTED_ERROR

(六):RequestID

给我们请求一个编号,占用64bit,是一个Long值。

(七):数据长度

Data Length (32)数据长度

这个数据长度的大小是必须要给的,只有给了这个数据长度的大小,我们才可以顺利的解决半包和粘包问题。

相关推荐
水水沝淼㵘27 分钟前
嵌入式开发学习日志(数据库II && 网页制作)Day38
服务器·c语言·网络·数据结构·数据库·学习
天翼云开发者社区1 小时前
SRv6 验证实验
网络
领世达检测V133529092491 小时前
路由器欧盟EN 18031网络安全认证详细解读
网络
黎茗Dawn1 小时前
11.TCP三次握手
网络·tcp/ip
LIU_Skill2 小时前
HTTPS核心机制详解
网络·tcp/ip·https
赴前尘4 小时前
深入解析Docker网桥模式:从docker0到容器网络的完整通信链路
网络·docker·容器
cui_win4 小时前
【网络】每天掌握一个Linux命令 - netperf
linux·运维·网络·网络性能测试·netperf
EndingCoder4 小时前
网络请求与本地存储:Axios 与 AsyncStorage 在 React Native 中的应用
网络·react native·php
Leo.yuan5 小时前
数据隐私是什么?如何做好数据隐私规范?
大数据·网络·数据库·人工智能·信息可视化