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

其实是参考的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[]

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-15 05:40:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-15 05:40:05       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-15 05:40:05       82 阅读
  4. Python语言-面向对象

    2024-04-15 05:40:05       91 阅读

热门阅读

  1. Unity Android 2022 Release-Notes

    2024-04-15 05:40:05       29 阅读
  2. TensorRT从入门到了解-学习笔记(待续)

    2024-04-15 05:40:05       33 阅读
  3. SpringBoot实用开发(十六)-- SpringBoot整合ActiveMQ

    2024-04-15 05:40:05       44 阅读
  4. SpringBoot实用开发(十五)-- ActiveMQ的安装

    2024-04-15 05:40:05       41 阅读
  5. [HDFS Web界面功能 ]

    2024-04-15 05:40:05       40 阅读
  6. Docker in Docker (DinD): 深入探索与实际应用

    2024-04-15 05:40:05       40 阅读
  7. 快速配置docker 国内源地址

    2024-04-15 05:40:05       178 阅读
  8. 上一篇文章中的nvm有歧义

    2024-04-15 05:40:05       142 阅读
  9. 从零实现诗词GPT大模型:了解自注意力机制

    2024-04-15 05:40:05       65 阅读
  10. Spring Boot 经典面试题(八)

    2024-04-15 05:40:05       42 阅读
  11. Leetcode 528 按权重随机选择

    2024-04-15 05:40:05       34 阅读
  12. [Linux] keytool 命令(by Copilot)

    2024-04-15 05:40:05       41 阅读