一、简介

MQTT 全称为 Message Queuing Telemetry Transport(消息队列遥测传输)是一种基于发布/订阅范式的“轻量级”消息协议,由 IBM 发布。

目前使用比较广泛的就是 mqtt 3.1.1(2014年制定),mqtt 5.0(2018年制定),Mqtt5特性详见:https://www.emqx.io/cn/mqtt/mqtt5

二、mica-mqtt

为了深入了解 mqtt 协议的,在今年 9 月左右基于 t-io 开发了 mica-mqtt,mqtt 编解码直接基于 netty codec-mqtt 模块进行的调整,当时 netty 还不支持 mqtt5 协议。

netty 的 codec-mqtt 比较成熟,大多数 java 的 mqtt-broker 也是基于它实现的。下面我主要介绍我是如何将 netty 的 codec-mqtt 移植到 t-io 的。

三、mqtt5协议移植

前 2 周发现 netty 的 codec-mqtt 已经支持 mqtt5 协议了,花了一点时间对它进行了升级,下面跟我一起来看看我是怎么处理的。

3.1 copy 源码

先直接 copy 源码,对代码进行初步的调整,

  1. ObjectUtil.checkNotNull改为 jdk 的Objects.requireNonNull
  2. CharsetUtil.UTF_8调整为 StandardCharsets.UTF_8
  3. 重写toString方法

3.2 ByteBuf 转 ByteBuffer

netty 中采用 ByteBuf 来解析协议,t-io 则是使用的 ByteBuffer,那么我们最大的任务就是将 ByteBuf 转成 ByteBuffer 了。

ByteBuf vs ByteBuffer 方法对比

ByteBuf ByteBuffer
writeByte put
writeBytes put
writeShort putShort
writeInt putInt
getByte get
getBytes get
getShort getShort
getInt getInt

3.3 mqtt5 encodeProperties 处理

由于 ByteBuffer 是定长的,初始化的时候就需要指定长度,在 encodeProperties 我自定义了一个WriteBuffer做数据承载,最后转成byte[]返回。

图示WriteBuffer

WriteBuffer底层是 t-io 自带原作者为 biezhi(王爵)同学的FastByteBuffer

四、效果(mqtt5协议)

4.1 使用 MQTTX 客户端

4.2 使用 mica-mqtt 客户端

五、待办

由于精力有限,mica-mqtt 目前还属于试验性质。希望有更多的同学可以参与进来。

  1. topic 的绑定。
  2. 实现基础的 mqtt-broker 功能。

说明:另外可以参考 zbus 来处理消息或者实现内部的集群。

六、关于 t-io

t-io 是一款简单、高性能、低延迟的网络中台。t-io 解决了其它网络框架没有解决的用户痛点,帮助企业节约大量人力成本。

t-io技术白皮书:https://www.tiocloud.com/tio.pdf

t-io 官方基础 t-io 的 IM(谭聊) 1.4 万人大群,邀你一起来耍!!!

谭聊产品介绍:https://www.tiocloud.com/tioim.pdf

七、相关连接

mica-mqtt:https://gitee.com/596392912/mica-mqtt

t-io:https://gitee.com/tywo45/t-io

java mqtt客户端_基于 t-io 实现一个 mqtt5 协议之 mica-mqtt相关推荐

  1. mqtt客户端_初次接触MQTT

    MQTT是什么? MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议.它工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟 ...

  2. MQTT客户端(基于mosquitto库)上报温度到腾讯云

    Linux C MQTT上报温度到腾讯云(基于mosquitto库) 一.创建产品 1.进入腾讯云官网,登陆或注册账号 2.进入控制台 3.鼠标滑到云产品,进入物联设备服务中的物联网通信 4.点击创建 ...

  3. java流程审批_基于SSM框架下的JAVA企业流程审批系统

    每天记录学习,每天会有好心情.*^_^* 今天将为大家分析一个企业流程审批系统(现代企业对资金流的控制十分严格,但是绝大部分企业的费用审批还停滞在手动填单.逐级递交.逐级审批的现状,既没有效率也不利于 ...

  4. java校园导航_基于Android平台的校园导航系统

    摘要:随着移动网络通讯技术的迅速发展和基于安卓技术的手持终端设备的日益普及,Android手机在学生群体中普遍使用,各类高校内部一般都具有良好的校园网络环境.虽然现在出现了各式各样的地图导航软件,但在 ...

  5. java ssh客户端_简单的Java SSH客户端

    java ssh客户端 可以使用jcabi-ssh在Java中通过几行代码通过SSH执行shell命令: String hello = new Shell.Plain(new SSH("ss ...

  6. JAVA就诊叫号_基于B/S的JAVA门诊就诊系统

    每天记录学习,每天会有好心情.*^_^* 今日思考,完成一个门诊就诊系统的设计与实现项目,需要实现哪些功能? 此类项目常见描述如下: 本文重点介绍了门诊就诊系统的设计与实现,采用C/S的开发模式,使用 ...

  7. java 统一日志_基于log4j实现统一日志管理

    背景: 一般操作系统级的告警有相关的软件,但我们应用级日志往往无法统一监控.分析.因为最近的项目是比较大的一个平台,有七.八个子系统,weblogic域也有三.四个.如果用户自身能够实时监控到应用级致 ...

  8. MQTT客户端(基于mosquitto)上报温度到华为云 ——DS18B20发布订阅温度(Linux C编程)

    目录 一.创建产品 二.创建产品功能 三.创建设备 四.获取MQTT连接参数 五.消息主体 六.连接华为云 七.完整代码 回顾记录 一.创建产品 1.进入华为云官网,注册或登录后,点击右上角的&quo ...

  9. java 教学反馈系统_基于SSM框架下的JAVA教师教学质量评价信息反馈系统

    每天记录学习,每天会有好心情.*^_^* 今天将为大家分析一个教师教学质量评价信息反馈系统(教师教学质量评价可以从多个方面开展,其中学生是课堂的直接参与者,学生评教可以使学校管理层获得真实而全面的信息 ...

最新文章

  1. 重回大厂 996 的年轻人:还是先搞钱
  2. 8.MYSQL:触发器的使用[TRIGGER]
  3. currency in SalesPipeline
  4. 华为5g鸿蒙折叠,华为5G折叠概念新机:内折叠+麒麟9000+鸿蒙OS 这才是华为的实力...
  5. php js跨域上传文件,Jquery实现跨域异步上传文件步骤详解
  6. kali linux wps 2019 删除_良心推荐!Linux系统下常用办公软件大盘点
  7. zabbix 3.2.3 appliance默认用户名及密码
  8. static 关键字的作用
  9. 反激变换器matlab仿真变压器demo,反激变换器建模Matlab仿真
  10. QQ群红包裂变吸粉引流 玩法解析实战操作
  11. 约当标准型_特征向量到约当标准型
  12. NShape(开源矢量图形编辑器) 入门(一)
  13. 计算机网卡的总线接口分类有,网卡的详细分类是怎样的?以太网卡有将高层数据转换为比特流的功能吗?...
  14. 网络安全——防火墙详解
  15. 【Unity】打包时异常 HideFlages.DontSave
  16. latex 表格中如何精细控制行高,行距,行与行之间的距离
  17. 实验11-1-7 藏头诗 (15分)
  18. 乐高教育版45544零件---分类识别
  19. 使用不正确的主题来学习WordPress主题评论
  20. Jmeter测试数据怎么保存

热门文章

  1. 每个人都有自己的秘密
  2. 域内操作主机角色一向让很多人很头痛,我归纳总结一下,希望对大家有帮助...
  3. Ubuntu16.04 php7.0+mysql5.7+apache2环境搭配
  4. 基于MUI框架的HTML5+的二维码扫描实现
  5. java超时自动关闭_[Java教程]web页面超时自动退出方法_星空网
  6. ajax获取shiroehcache,Shiro – 使用EhCache缓存
  7. idea工作台输出的日志详解_详解linux下nohup日志输出过大问题解决方案--分批切割...
  8. [蓝桥杯][算法提高VIP]夺宝奇兵(记忆化搜索||DP)
  9. Hike on a Graph HDU - 1252(bfs)
  10. 2019蓝桥杯国赛B组第九题