网络篇06 | 应用层 自定义协议

网络篇06 | 应用层 自定义协议

  • 01 固定协议设计(简化版)
    • 1)总体设计
    • 2)值设计
  • 02 可变协议设计(进阶版)
    • 1)固定头(Fixed Header)
    • 2)可变头(Variable Header)
    • 3)消息体(Payload)

其实是参考的TCP的协议报文,mqtt也是参考的tcp的协议报文,具体实现由自己自由发挥即可。

01 固定协议设计(简化版)

1)总体设计

2)值设计

在这里插入图片描述

02 可变协议设计(进阶版)

在这里插入图片描述

1)固定头(Fixed Header)

messageWay[1–10] 无可变头
1用户端管道激活 2后端管道激活
3用户端消息报文 4后端消息报文
5用户端心跳报文 6后端心跳报文
7用户退出报文 7后端退出报文
9用户异常报文 10后端异常报文

messageType
0平台接收
1在线单用户,本地消息直接发送
2在线全用户,本地消息直接发送,触发广播发送方式
3离线单用户,结合52报文实现
4离线全用户,结合52报文实现
5在线全用户广播消费(和2配套使用)
6在线单用户-定点转发(和1配套使用,如果定点发送失败,需清除错误的redis地址,并丢弃本次消息)
7在线单用户-群发转发(和1配套使用,redis找不到addr,群发后只有消费成功的channel,将对应的addr记录到redis中)
8平台客户端消息踢人下线内部报文

2)可变头(Variable Header)

 [1-2]字节,用于存储可变头其他自定义字段的字节长度。
 [3]字节 可变头的版本号,可以支持多个版本
 [4]字节:
       [4]字节 Bit[7-6]为保留字段。

       [4]字节 Bit[5]如果该值为1,表示发送客户端的同时发送一份到服务端,0表示只发送客户端

       [4]字节 Bit[4]如果该值为1,表示如果用户在线则直接发送,0表示下一次用户登录时发送 
       [4]字节 Bit[3]为DUP字段,如果该值为1,表明这个数据包是一条重复的消息;否则该数据包就是第一次发布的消息。 
       [4]字节  Bit[2-1]为Qos字段:Bit1和Bit2为0表示QoS 0:至多一次;Bit1为1表示QoS1:至少一次;Bit2 为1表示QoS 2:只有一次; 
       [4]字节 Bit[0] 是否剔除可变头
  [5-8]字节 离线消息有效时间,单位默认(秒)

3)消息体(Payload)

存储形式:byte[]

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

51单片机-ADC模数转换实验-电压值

一 主要知识点及分析: 1.这里是用到的XPT2046芯片,芯片详细说明自行查阅; 2.这里有两种模式,一般外设的转换用的是单端模式,在使用触摸屏的时候我们选择差分模式; 3.这张图有就是时序图,读写都需要在这上面进行编写代码, 3.1 写8位代码:主要是将传入的控制命令进行写入; 3.2 读…

C# Solidworks二次开发:相机访问相关API详解

大家好,今天要介绍的API为相机相关的API,这篇文章比较适合女孩子,学会了相机就会拍照了,哈哈。 下面是要介绍的API: (1)第一个为GetFocalDistance,这个API的含义为获取相机的焦距,…

光速论文靠谱不 #学习方法#笔记

光速论文是一款优秀的论文写作工具,许多学生和学者都对它赞不绝口。那么,光速论文靠谱吗?答案当然是肯定的! 首先,光速论文具有强大的查重和降重功能。它能够帮助用户快速检测论文中的抄袭内容,并提供专业的…

小程序变更主体影响使用吗?

小程序迁移变更主体有什么作用?有些小程序开发者,因为业务调整,或者公司更换,需要更换小程序主体!但是很多开发者对于小程序更换主体的操作流程并不熟悉,于是我们专门准备了这篇,关于小程序更换…

2024年航海制造工程与海洋工程国际会议(ICNMEME2024)

2024年航海制造工程与海洋工程国际会议(ICNMEME2024) 会议简介 2024年航海制造工程与海洋工程国际会议(ICNMEME2024)旨在将研究人员、工程师、科学家和行业专业人士聚集在一个开放论坛上,展示他们在导航制造工程与海洋工程领域的激励研究和知识转移理念。然而&…

嵌入式MCU BootLoader开发配置详细笔记教程

目录 一、BootLoader基础 二、BootLoader原理及配置 三、BootLoader程序 bootloader.h bootloader.c 四、Application1 用户程序 application1.h application1.c 五、Application2 用户程序 application2.h 六、程序运行效果 七、工程文件Demo 一、BootLoader基础 …

C++ | Leetcode C++题解之第29题两数相除

题目: 题解: class Solution { public:int divide(int dividend, int divisor) {// 考虑被除数为最小值的情况if (dividend INT_MIN) {if (divisor 1) {return INT_MIN;}if (divisor -1) {return INT_MAX;}}// 考虑除数为最小值的情况if (divisor I…

C++ 之 【类与对象】从入门到精通一条龙服务 最终篇(static成员、友元、匿名对象。。。)

💴到用时方恨早,白首方悔挣的少 车到山前没有路,悬崖勒马勒不住 一、再谈构造函数 1.构造函数体赋值 2.初始化列表 3.explicit关键字 二、Static成员 1.概念 2.特性 三、友元 1.友元函数 2.友元类 四、内部类 五、匿名对象 六、…

项目5-博客系统5+程序部署(Linux基本使用)

1.Linux的基本使用 1.1 Linux 是什么 Linux 是⼀个操作系统. 和 Windows 是 "并列" 的关系. 1.2 Unix & Linux 发展历程图 1.1969−1970 年, ⻉尔实验室的 Dennis Ritchie (左) 和 Ken Tompson (右) 开发了 Unix 操作系统. 2. Unix ⽕了之后, 衍⽣出很多的分⽀…

jvm参数介绍

JVM参数是指在Java应用程序启动时,通过命令行或者配置文件等方式传递给JVM的一些参数和选项。这些参数主要用于配置JVM的内存、垃圾回收、线程等相关参数。下面是一些常见的JVM参数简介: 1. -Xmx:设置应用程序可使用的最大内存量,…

C++ | Leetcode C++题解之第30题串联所有单词的子串

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> findSubstring(string &s, vector<string> &words) {vector<int> res;int m words.size(), n words[0].size(), ls s.size();for (int i 0; i < n && i m …

文献阅读:Viv:在 web 上多尺度可视化高分辨率多重生物成像数据

文献介绍 「文献题目」 Viv: multiscale visualization of high-resolution multiplexed bioimaging data on the web 「研究团队」 Nils Gehlenborg&#xff08;美国哈佛医学院&#xff09; 「发表时间」 2022-05-11 「发表期刊」 Nature Methods 「影响因子」 47.9 「DOI…

GitHub repository - Code - Issues - Pull Requests - Wiki

GitHub repository - Code - Issues - Pull Requests - Wiki 1. Code2. Issues3. Pull Requests4. WikiReferences 1. Code 显示该仓库中的文件列表。仓库名下方是该仓库的简单说明和 URL. 2. Issues 用于 BUG 报告、功能添加、方向性讨论等&#xff0c;将这些以 Issue 形式进…

初识DOM

目录 前言: 1.初识DOM: 1.1DOM树: 1.2节点&#xff08;Node&#xff09;: 1.2.1元素节点&#xff1a; 1.2.2属性节点&#xff1a; 1.2.3文本节点&#xff1a; 1.3Document对象: 2.操作网页元素: 2.1找出元素&#xff1a; 2.1.1document.getElementById(id)&#xff1…

【入门】时钟旋转

时间限制 : 1 秒 内存限制 : 128 MB 时钟上面的时针从m时走到n时旋转了多少度&#xff1f;&#xff08;m<n&#xff0c;且m和n都是1~12之间的整数&#xff09; 输入 2个整数m和n 输出 一个整数代表时针旋转的度数 样例 输入 1 4 输出 90 提示 基础问题 #includ…

2011年认证杯SPSSPRO杯数学建模A题(第二阶段)客机水面迫降时的姿态全过程文档及程序

2011年认证杯SPSSPRO杯数学建模 A题 客机水面迫降时的姿态 原题再现&#xff1a; 2009 年 1 月 15 日下午&#xff08;美国东部时间&#xff09;&#xff0c;US Airways 所属第 1549 航班&#xff08;空中客车 A320 客机&#xff09;在起飞后不久在纽约哈德逊河紧急迫降。经及…

Android MVVM架构学习——ViewModel DataBinding

关于MVVM架构&#xff0c;我并不想花篇幅去做重复性的描述&#xff0c;网上一搜都是一堆讲解&#xff0c;大家可以自行了解&#xff0c;我所做的只是以最简单的例子&#xff0c;最有效的步骤&#xff0c;从零开始&#xff0c;去实现一个相对有点学习参考价值的项目。 先来看本…

鸿蒙开发快速入门

基本概念 ArkTS 因为ArkTS是基于Type Script扩展而来&#xff0c;是Type Script的超集&#xff0c;所以也可以关注一下Type Script的语法来理解ArkTS的语法 ArkUI HarmonyOS提供了一套UI开发框架&#xff0c;即方舟开发框架&#xff08;ArkUI框架&#xff09;。方舟开发框架…

Cohere Command R+:企业级可扩展大模型

Command R 是一种最先进的 RAG 优化模型&#xff0c;旨在处理企业级工作负载&#xff0c;并首先在 Microsoft Azure 上提供 今天&#xff0c;我们推出了 Command R&#xff0c;这是我们最强大、可扩展的大型语言模型 &#xff08;LLM&#xff09;&#xff0c;专为在实际企业用…

Go语言图像处理深入指南:探索 `image/draw` 标准库

Go语言图像处理深入指南&#xff1a;探索 image/draw 标准库 引言基础知识图像类型颜色模型draw 包概览 image/draw 的基本用法创建和操作图像复制和粘贴图像遮罩和图像合成 高级技巧自定义图像处理性能优化多线程图像处理 实战案例图像滤镜实现动态图像生成图像处理工具开发 总…