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

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

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

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

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

1)总体设计

2)值设计

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

1)固定头(Fixed Header)

messageWay1--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[]
相关推荐
GlobalInfo7 小时前
AI与另类数据融合,市场研究正在从“经验驱动”走向“数据智能”
大数据·网络·人工智能·ai
Rabitebla7 小时前
C++11 新特性详解(一):列表初始化、initializer_list 与右值引用
java·开发语言·数据结构·c++·算法·leetcode·list
天吾cc7 小时前
RTT-MQTT
网络·单片机·嵌入式硬件·算法
洋不写bug7 小时前
JavaComparable、Comparator、Cloneable接口解析,深拷贝浅拷贝详细解析
android·java·开发语言
千视kiloview7 小时前
“轻”不等于降级:IP时代广播制作系统的轻量化与Hybrid架构实践
网络·tcp/ip·架构
坐吃山猪7 小时前
WebFlux_学习Subscriber总结
java·开发语言·学习·webflux
不爱土豆唯爱马铃薯7 小时前
升级 AiPy Pro 2.0 后,我把安全中心这几项挨个打开了数据安全、沙盒权限、工作空间隔离——这些 2.0 新功能对科研协作场景的实际影响
网络·安全·php
白露与泡影7 小时前
Java面试题及答案整理(2026年金九银十最新版,持续更新)
java·开发语言
geovindu8 小时前
java: Memento Pattern
java·开发语言·后端·备忘录模式·行为模式
xcLeigh8 小时前
Unity基础:Start与Update方法——Unity脚本生命周期初探
java·unity·游戏引擎·教程