砍材农夫砍材农夫
  • 微信记账小程序
  • java
  • redis
  • mysql
  • 场景类
  • 框架类
  • vuepress搭建
  • hexo搭建
  • 云图
  • llm wiki

    • 基于karpathy
    • gradle
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • 环境配置
    • 微信生态
    • 正则
    • 全栈技能
  • java圈

    • java基础
    • jdk体系
    • jvm
    • spring框架
    • 分库分表
    • zookeeper
  • python技能

    • python编程
    • python数据
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI插件
  • AI集成框架
  • 相关算法
  • AI训练师
  • 量化交易
  • AIoT
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • devops
  • 元宇宙
  • 区块链
  • 物联网
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 思
  • 微信记账小程序
  • java
  • redis
  • mysql
  • 场景类
  • 框架类
  • vuepress搭建
  • hexo搭建
  • 云图
  • llm wiki

    • 基于karpathy
    • gradle
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • 环境配置
    • 微信生态
    • 正则
    • 全栈技能
  • java圈

    • java基础
    • jdk体系
    • jvm
    • spring框架
    • 分库分表
    • zookeeper
  • python技能

    • python编程
    • python数据
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI插件
  • AI集成框架
  • 相关算法
  • AI训练师
  • 量化交易
  • AIoT
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • devops
  • 元宇宙
  • 区块链
  • 物联网
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 思
  • 首页
    • 开发板介绍
    • micropython环境搭建
    • esp32开发板
    • 面包板
    • 万能表使用
  • 面包板
    • 点灯
  • esp32
    • 点亮开发板led灯
    • 点亮外接led
    • 点亮外接oled文字
    • 红外传感器
    • 红外传感器+olde
    • esp32+面包板
  • MQTT编程

    • MQTT入门

      • 物联网 MQTT
      • 物联网 MQTT和Socket
      • 物联网 MQTT订阅性能优势
      • 物联网 MQTT简易版Broker
    • HiveMQ

      • hivemq实战入门
    • Protobuf

      • Protobuf入门
      • Protobuf入门+梳理
      • Protobuf实战第一篇
    • emqx

      • emqx入门
    • mica

      • mica入门
    • netty

      • 入门

        • 基于netty构建入门
        • 理解粘包/拆包
        • 编解码器机制与自定义协议
        • 心跳和ack机制
        • mqtt服务demo演示
        • mqtt服务协议支持
        • mqtt服务udp支持
      • 协议规范

        • mqtt协议规范(发布/订阅模式)
        • mqtt协议规范(轻量级二进制协议)
        • mqtt协议规范(三种 QoS 等级)
        • mqtt协议规范(主题通配符订阅)
        • mqtt协议规范(遗嘱与保留消息)
      • 报文结构

        • 控制报文结构(报文分类)
        • 控制报文结构(连接与握手)
        • 控制报文结构(发布与接收)
      • 核心实战

        • 核心实战(握手与认证)
        • 核心实战(心跳保活机制)
        • 核心实战(会话管理)
        • 核心实战(安全)
    • mqtt-模拟器

      • 集成Paho

        • 设备模拟器设计
        • 设备模拟器演示
        • Paho拆解入门
        • Paho拆解核心
        • Paho拆解高性能
        • 其他客户端框架比较
      • NetAssist

        • 设备模拟器设计
    • netty-mqtt-boot

      • 模块化设计
      • 统一接入层
      • 消息路由与流转层
      • 核心服务层
      • 业务应用层
      • 整体项目管理
      • 测试脚手架
      • 兼容支持
    • mqtt-压测

      • mqtt-jmeter

        • 模块化设计
      • ‌emqtt-bench

        • 模块化设计
    • mqtt-规则引擎

      • MQTT规则引擎
      • sql

        • 基于sql规则
      • ice

        • 模块化设计
      • Aviator

        • 模块化设计
      • Drools

        • 模块化设计
  • 物联网 Protobuf实战第一篇
    • 相关源码
    • 项目结构
    • 定义相关protobuf文件说明
    • 🎯 设计规范的目的
      • 1. 模块化分离(Modular Separation)
      • 2. 版本化管理(Versioning)
      • 3. 单向依赖原则(Unidirectional Dependency)
      • 4. 消息完整性(Message Integrity)

物联网 Protobuf实战第一篇

物联网 protobuf 相关约定和定义

相关源码

https://gitee.com/kcnf-iot/iot-sample/tree/master/protobuf/protobuf-sample-03

项目结构

img

定义相关protobuf文件说明

├── common/                          # 公共基础类型
│   ├── header.proto                # 消息头定义
│   ├── device_status.proto         # 设备状态
│   ├── ack.proto                   # 确认响应
│   └── enums.proto                 # 通用枚举
├── upload/                          # 上行消息(设备→云)
│   ├── device_upload.proto         # 上传消息主结构
│   ├── sensor_data.proto           # 传感器数据
│   └── event_data.proto            # 事件数据
├── command/                         # 下行消息(云→设备)
│   ├── device_command.proto        # 命令消息主结构
│   ├── config_update.proto         # 配置更新
│   ├── fota_update.proto           # 固件升级
│   └── control_command.proto       # 控制命令
└── response/                        # 响应消息
    └── response.proto      # 命令响应

🎯 设计规范的目的

1. 模块化分离(Modular Separation)

  • 目的:将不同职责的消息类型分离到独立目录,提高可维护性和可扩展性
  • 实现:
    • common/:存放所有模块共享的基础类型(消息头、枚举、设备状态等)
    • upload/:专门处理设备到云平台的上行数据(传感器数据、事件上报)
    • command/:专门处理云平台到设备的下行指令(配置更新、FOTA、控制命令)
    • response/:统一处理设备响应消息
  • 优势:
    • ✅ 职责清晰,每个目录专注单一业务领域
    • ✅ 降低耦合,修改某个模块不影响其他模块
    • ✅ 便于团队协作,不同开发人员可并行工作

2. 版本化管理(Versioning)

  • 目的:支持协议演进和多版本共存,避免破坏性变更影响现有设备
  • 实现:使用 v1/ 目录标识协议版本,未来可并行存在 v2/、v3/ 等
  • 版本演进策略:
    • 向后兼容:新增字段使用可选字段或 oneof 扩展,不删除已有字段
    • 废弃标记:使用 reserved 关键字标记已废弃的字段编号
    • 多版本共存:v1 设备和 v2 设备可同时接入,服务端根据 Header.version 路由
  • 优势:
    • ✅ 平滑升级,新旧设备可同时运行
    • ✅ 灰度发布,逐步推广新协议
    • ✅ 回滚能力,出现问题可快速切回旧版本

3. 单向依赖原则(Unidirectional Dependency)

  • 目的:避免循环依赖,确保编译顺序清晰

  • 实现:

    • 业务模块(upload/command)依赖 common 模块
    • common 模块不依赖任何业务模块
    • 同一层级模块间互不依赖
  • 依赖关系图:

  • 优势:

    • ✅ 编译顺序明确,避免循环引用错误
    • ✅ 层次清晰,易于理解和维护
    • ✅ 便于单元测试,可独立测试各模块

4. 消息完整性(Message Integrity)

  • 目的:每条消息包含完整的上下文信息,支持追踪、认证、QoS 保障
  • 实现:
    • 所有上行消息包含 Header(消息ID、时间戳、trace_id、QoS等级)
    • 支持 need_ack 标志位实现可靠传输
    • 内置 auth_token 支持设备认证
  • 优势:
    • ✅ 全链路追踪,便于故障排查和性能分析
    • ✅ 可靠传输,关键消息不丢失
    • ✅ 安全认证,防止非法设备接入
最近更新: 2026/5/16 10:03
Contributors: kcnf
Prev
Protobuf入门+梳理