网络篇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[]

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5、LMDeploy 量化部署 LLMVLM实战(homework)

基础作业(结营必做) 完成以下任务,并将实现过程记录截图: 配置lmdeploy运行环境 由于环境依赖项存在torch,下载过程可能比较缓慢。InternStudio上提供了快速创建conda环境的方法。打开命令行终端,创建一…

简单认识Git(dirsearch、githack下载),git泄露(ctfhub)

目录 dirsearch下载地址: githack下载(一次不成功可多试几次) 一、什么是Git 1.git结构 2.git常用命令及示例 3.Git泄露原理 二、Git泄露 1.Log 2.Stash 3.Index 工具准备:dirsearch、githack dirsearch下载地址: GitHub - mauroso…

数字乡村创新实践探索农业现代化与乡村振兴新路径:科技赋能农村全面振兴与农民幸福新篇章

随着信息技术的飞速发展,数字乡村成为推动农业现代化与乡村振兴的重要战略举措。科技赋能下的数字乡村创新实践,不仅提升了农业生产的智能化水平,也为乡村治理和农民生活带来了翻天覆地的变化。本文旨在探讨数字乡村创新实践在农业现代化与乡…

OpenCV的查找命中或未命中

返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV4.9更多形态转换 下一篇:OpenCV系列文章目录(持续更新中......) 目标 在本教程中,您将学习如何使用 Hit-or-Miss 转换(也称为 Hit-and-Miss 转…

JavaScript知识点 --javaweb学习笔记

什么是Javascript? JavaScript(简称:JS)是一门跨平台、面向对象的脚本语言。是用来控制网页行为的,它能使网页可交互JavaScript 和Java 是完全不同的语言,不论是概念还是设计。但是基础语法类似JavaScript在1995 年由 Brendan Eich 发明,并…

护眼台灯什么品牌好?推荐目前比较好用的护眼台灯

现在孩子的近视率很高,尤其是儿童青少年居多,上了小学作业都变多了,很多孩子经常需要学习到很晚,不过家长们在重视教育质量的同时,有注意到孩子学习时的光线适合学习吗?用眼过度和光线不合适都容易导致近视…

Java快速入门系列-9(Spring框架与Spring Boot —— 深度探索及实践指南)

第九章:Spring框架与Spring Boot —— 深度探索及实践指南 9.1 Spring框架概述9.2 Spring IoC容器9.3 Spring AOP9.4 Spring MVC9.5 Spring Data JPA/Hibernate9.6 Spring Boot快速入门与核心特性9.7 Spring Boot的自动配置与启动流程详解9.8 创建RESTful服务与数据库交互实践…

OpenHarmony南向开发案例:【智能垃圾桶】

样例简介 智能垃圾桶可以通过数字管家应用来监测垃圾桶当前可用容量,提醒主人及时处理垃圾;通过日程管家可以实现和其他智能设备联动。 核心组件位置功能距离传感器置于垃圾桶盖内侧感应垃圾量红外传感器置于垃圾桶前端感应是否有人靠近光敏电阻开发板…

0.25W 3KVDC 隔离单、双输出 DC/DC SMD 型电源模块 ——TPVT-W2 系列

TPVT-W2系列是一款标准的表面贴装电源模块,完全实现采用全自动贴片机来组装和满足回流焊工艺,大大提高产能和降低人工费用。此系列产品小,效率高,低输出纹波及提供3000V以上的直流电压隔离,SMD封装。

第一节:什么是操作系统

什么是操作系统 一、一台计算机的组成部分1、计算机能干啥2、谈谈计算机硬件 二、什么是操作系统三、学习操作系统的层次 一、一台计算机的组成部分 如下图所示: 这就是就是构成一台计算机的组成部分 1、计算机能干啥 ∙ \bullet ∙计算机是我们专业吃饭的家伙&a…

微信小程序公共组件封装使用

1.在components目录下创建公共组件,以navbar为例 2.完成组件功能 3.调用,如果很多地方都会用到,建议放全局,如果不是则放在需要引用的文件中 3.1全局引用,在app.json做全局引用配置 3.2局部引用,在需要引入…

密码学与密码安全:理论与实践

title: 密码学与密码安全:理论与实践 date: 2024/4/10 21:22:31 updated: 2024/4/10 21:22:31 tags: 密码学加密算法安全协议密码分析密码安全实际应用未来发展 第一章:密码学基础 1.1 密码学概述 密码学是研究如何保护信息安全的学科,旨在…

C语言疑难点

AScii码: \0 、0、‘0’的区别:‘\0’转义字符的ascii码值是0,’\0’与数字0相同,但不与‘0’相同,‘0’的ascii码值是48,‘a字符的值是97(ASCII表) 字符串长度为5,大小…

房贷还款(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h> # include <math.h>int main() {//初始化变量值&#xff1b;double m, r 0.01;float d 300000;float p 6000;//运算还款所需月份&#xff1b;m log10…

Lua脚本使用手册(Redis篇)

Lua脚本 **简介&#xff1a;**Lua是一种功能强大的&#xff0c;高效&#xff0c;轻量级&#xff0c;可嵌入的脚本语言。它是动态类型语言&#xff0c;通过使用基于寄存器的虚拟机解释字节码运行&#xff0c;并具有增量垃圾收集的自动内存管理&#xff0c;是配置&#xff0c;脚…

Java-Tomcat

一、web补充技术 ①&#xff1a;B/S架构 主流的方式&#xff0c;只要有浏览器即可。编程方式直接基于socket即可 ②&#xff1a;javascript 简称js&#xff0c;早期只是实现在客户端的浏览器的动态效果&#xff0c;但服务端不会解释运行&#xff0c;所以本质上是静态资源。 …

1.16 LeetCode总结(基本算法)动态规划2

70. 爬楼梯 首先想到的是递归&#xff1a; // 递归 int climbStairs(int n) {if (n 1) {return 1;} else if (n 2) {return 2;}return climbStairs(n - 1) climbStairs(n - 2); }我们先来看看这个递归的时间复杂度吧&#xff1a; 递归时间复杂度 解决一个子问题时间*子问…

【无人机/平衡车/机器人】详解STM32+MPU6050姿态解算—卡尔曼滤波+四元数法+互补滤波(文末附3个算法源码)

效果: MPU6050姿态解算-卡尔曼滤波+四元数+互补滤波 目录 基础知识详解 欧拉角

Unsupervised Learning ~ Anomaly detection

unusual events vibration: 振动 Density estimation: Gaussian(normal) Distribution. standard deviation: 标准差 variance deviation sigma Mu Parameter estimation Anomaly detection algorithm 少量异常样本点的处理经验 algorithm evaluation skewed datatsets:…

Java实现二叉树(下)

1.前言 http://t.csdnimg.cn/lO4S7 在前文我们已经简单的讲解了二叉树的基本概念&#xff0c;本文将讲解具体的实现 2.基本功能的实现 2.1获取树中节点个数 public int size(TreeNode root){if(rootnull){return 0;}int retsize(root.left)size(root.right)1;return ret;}p…