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

news2024/11/15 17:44:34

文章目录

文章说明

一:Dubbo协议

1:Dubbo协议简介

2:Dubbo协议优点

 3:Dubbo协议帧的组成

(一):幻数

(二):2Way

(三):event

(四):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)数据长度

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/900391.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

react之react-redux的介绍、基本使用、获取状态、分发动作、数据流、reducer的分离与合并等

react之react-redux的介绍、基本使用、获取状态、分发动作、数据流、reducer的分离与合并等 一、react-redux介绍二、React-Redux-基本使用三、获取状态useSelector四、分发动作useDispatch五、 Redux 数据流六、代码结构七、ActionType的使用八、Reducer的分离与合并九、购物挣…

python:tkinter + cef 模仿 mdict 界面

cefpython3 其上游是C开发的CEF(基于webkit、V8), CEF 即 (Chromium Embedder Framework), 是基于Google Chromium项目的开源 Web browser控件(WebView)。 可查看github文档:cefpython api pip install cefpython3 c…

信号灯集和共享内存的综合应用小例子

要求:使用信号灯集和共享内存实现:一个进程对共享内存存放数据"Nice to meet you"循环倒置,一个进程循环输出共享内存的内容,要确保倒置一次打印一次。 分析:这两个进程可以写成两个源文件,一个…

回归预测 | MATLAB实现SSA-SVM麻雀搜索算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现SSA-SVM麻雀搜索算法优化支持向量机多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现SSA-SVM麻雀搜索算法优化支持向量机多输入单输出回归预测(多指标,多图)效果一览基…

VCRUNTIME140_1.dll丢失是怎么回事?三个解决方法分享

最近打开软件或者游戏的时出现了以下问题一开始以为是自己手残又误删了什么,重新安装了两次也没有解决,看网上有许多朋友安装其他软件时会出现缺少VCRUNTIME140.dll,其实VCRUNTIME140_1.dll是微软Visual C Redistributable安装包中的一个动态…

AgentBench——AI智能体基准测试和排行榜

如果您有兴趣了解有关如何对AI大型语言模型或LLM进行基准测试的更多信息,那么一种新的基准测试工具Agent Bench已成为游戏规则的改变者。这个创新工具经过精心设计,将大型语言模型列为代理,对其性能进行全面评估。该工具的首次亮相已经在AI社区掀起了波澜,揭示了ChatGPT-4目…

音视频 FFmpeg音视频处理流程

ffmpeg -i test_1920x1080.mp4 -acodec copy -vcodec libx264 -s 1280x720 test_1280x720.flv推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家: 零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核&am…

修复由于找不到vcruntime140.dll,无法继续执行代码的问题方法

提示“由于找不到 VCRUNTIME140.dll,无法继续执行代码。重新安装程序可能会解决此问题。”,这一般是什么原因导致了这个问题,我们要如何解决? 下面分享一下由于找不到vcruntime140.dll无法继续执行代码的解决方法。 解决方法&…

【C++】C++入门基础:引用详解

本篇继续分享关于C入门的相关知识,有关命名空间、缺省参数和函数重载的部分欢迎阅读我的上一篇文章【C】C入门基础详解(1)_王笃笃的博客-CSDN博客 继续我们的学习 引用 在C语言中我们接触过指针,很多人都或多或少为他感到头痛过…

开源后台管理系统Geekplus Admin

本系统采用前后端分离开发模式,后端采用springboot开发技术栈,mybatis持久层框架,redis缓存,shiro认证授权框架,freemarker模版在线生成代码,websocket消息推送等,后台管理包含用户管理&#xf…

1122.数组的相对排序

目录 一、题目 二、分析代码 一、题目 二、分析代码 核心计数排序&#xff01;&#xff01;&#xff01; class Solution { public: vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {int n arr1.size();int arr1_Max I…

C++ string类详解

⭐️ string string 是表示字符串的字符串类&#xff0c;该类的接口与常规容器的接口基本一致&#xff0c;还有一些额外的操作 string 的常规操作&#xff0c;在使用 string 类时&#xff0c;需要使用 #include <string> 以及 using namespace std;。 ✨ 帮助文档&…

USB隔离器电路分析,SA8338矽塔sytatek电机驱动,源特科技VPS8701,开关电源,电源 大师

一、 USB隔离器电路分析 进行usb隔离可以使用USB隔离模块 ADUM3160 ADUM4160 注意&#xff1a;B0505S 最大带载0.16A&#xff0c;副边需要带载能力需要改变方案 比如移动硬盘至少需要0.5A 用充电宝、18650、设计5V1A输出电源 二、 1A隔离电压方案

【蓝桥杯】[递归]母牛的故事

原题链接&#xff1a;https://www.dotcpp.com/oj/problem1004.html 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 我们列一个年份和母牛数量的表格&#xff1a; 通过观察&#xff0c;找规律&#xff0c;我们发现&#xff1a; 当年份小于等于4时&…

Linux环境下python连接Oracle教程

下载Oracle client需要的 安装包 rpm包下载地址&#xff1a;Oracle官方下载地址 选择系统版本 选择Oracle版本 下载3个rpm安装包 oracle-instantclient12.2-basic-12.2.0.1.0-1.i386.rpm oracle-instantclient12.2-devel-12.2.0.1.0-1.i386.rpm oracle-instantclient12.2-sq…

算法通关村第八关——轻松搞定二叉树的深度和高度问题

1.基础知识 二叉树节点的高度&#xff1a;指从当前节点到叶子节点的最长简单路径边的条数 二叉树节点的深度&#xff1a;指从根节点到当前节点的最长简单路径边的条数 二叉树的深度和高度问题&#xff0c;递归思想的运用很是普遍&#xff0c;有的问题层序遍历也可以解决。 2.最…

PyTorch Lightning:通过分布式训练扩展深度学习工作流

一、介绍 欢迎来到我们关于 PyTorch Lightning 系列的第二篇文章&#xff01;在上一篇文章中&#xff0c;我们向您介绍了 PyTorch Lightning&#xff0c;并探讨了它在简化深度学习模型开发方面的主要功能和优势。我们了解了 PyTorch Lightning 如何为组织和构建 PyTorch 代码提…

3种获取OpenStreetMap数据的方法【OSM】

OpenStreetMap 是每个人都可以编辑的世界地图。 这意味着你可以纠正错误、添加新地点&#xff0c;甚至自己为地图做出贡献&#xff01; 这是一个社区驱动的项目&#xff0c;拥有数百万注册用户。 这是一个社区驱动的项目&#xff0c;旨在在开放许可下向每个人提供所有地理数据。…

基于YOLOv8模型的奶牛目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型的奶牛目标检测系统可用于日常生活中检测与定位奶牛目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训练数据集…

【小梦C嘎嘎——启航篇】vector 以及日常使用的接口介绍

【小梦C嘎嘎——启航篇】vector 日常使用的接口介绍&#x1f60e; 前言&#x1f64c;vector 是什么&#xff1f;vector 比较常使用的接口 总结撒花&#x1f49e; &#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢的座右铭&#xff1a;全神贯注的上吧&#xff01…