java mqtt协议_基于 tio 实现 mqtt5 协议之 micamqtt
一、简介
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 源码,对代码进行初步的调整,
ObjectUtil.checkNotNull
改为 jdk 的Objects.requireNonNull
CharsetUtil.UTF_8
调整为 StandardCharsets.UTF_8- 重写
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 目前还属于试验性质。希望有更多的同学可以参与进来。
- topic 的绑定。
- 实现基础的 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协议_基于 tio 实现 mqtt5 协议之 micamqtt相关推荐
- java mqtt客户端_基于 t-io 实现一个 mqtt5 协议之 mica-mqtt
一.简介 MQTT 全称为 Message Queuing Telemetry Transport(消息队列遥测传输)是一种基于发布/订阅范式的"轻量级"消息协议,由 IBM 发布 ...
- java邮件系统设计_基于java技术的邮件系统设计与实现
论文字数:17915,页数:38 摘 要 电子邮件(简称E-mai1)又称电子信箱.电子邮政,它是-种用电子手段提供信息交换的通信方式.它是全球多种网络上使用最普遍的一项服务.这种非交互式的通信,加 ...
- JAVA初学者如何实现基于UDP和TCP协议的网络编程
首先,我们需要先了解UDP协议.TCP协议的概念: 一.UDP协议:用户数据报协议,是一种无连接协议 二.TCP协议:文件传输协议,是一种面向连接的协议 他们都位于TCP/IP模型中的传输层,为整个网 ...
- xk3190串口通讯JAVA开发包_常用品牌plc通讯协议汇总学习
一.美系厂家Rockwell ABRockwell的PLC主要是包括:PLC2.PLC3.PLC5.SLC500.ControlLogix等型号,PLC2和PLC3是早期型号,现在用的比较多的小型PL ...
- java outlook 发送邮件_基于java使用JavaMail发送邮件
一.邮件的相关概念 邮件协议.主要包括: SMTP协议:Simple Mail Transfer Protocol,即简单邮件传输协议,用于发送电子邮件 POP3协议:Post Office Prot ...
- netty 游戏服务器框图_基于Netty和WebSocket协议实现Web端自动打印订单服务方法与流程...
本发明涉及电子商务技术领域,尤其涉及一种基于netty和websocket协议实现web端自动打印订单服务方法. 背景技术: 电子商务是以信息网络技术为手段,以商品交换为中心的商务活动:也可理解为在互 ...
- java校园导航_基于Android平台的校园导航系统
摘要:随着移动网络通讯技术的迅速发展和基于安卓技术的手持终端设备的日益普及,Android手机在学生群体中普遍使用,各类高校内部一般都具有良好的校园网络环境.虽然现在出现了各式各样的地图导航软件,但在 ...
- dhcp协议_记录一次DHCP协议的学习过程
DHCP 动态主机设置协议(Dynamic Host Configuration Protocol,缩写:DHCP)是一个局域网的网络协议,使用UDP协议工作. BOOTP BOOTP(Bootstr ...
- 基于TCP的应用层协议 与基于UDP的应用层协议分别有哪些
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 基于TC ...
最新文章
- VirtualBox中的Linux读取Windows共享目录
- JavaOne正在重建动力
- background-size 兼容ie8以下浏览器的方法
- 【计算机科学基础】数据运算
- css div下第一个span,CSS之div和span标签
- Hive之架构 功能
- java oracle thin_????java thin 连接oracle url的几种写法
- Android导入第三方类库
- oracle分析函数技术详解(配上开窗函数over())
- pytorch实用工具总结(GFLOPs如何计算)
- 计算机文件夹加密文件,电脑文件夹怎么加密,制作隐私的加密文件夹软件
- 【蓝桥杯选拔赛真题13】Scratch接苹果游戏 少儿编程scratch蓝桥杯选拔赛真题讲解
- 南京地图njmaps使用,以公众版为例
- 2020年不再迷茫,解密:拼多多无货源店群实操分享!
- 用什么擦地最干净脑筋急转弯_小学生语文试卷:为什么秋天大雁要飞回南方?答案让人“喷饭”...
- HDU-圆桌会议问题
- mac 使用的小技巧
- STM32:USART串口外设(内含:1.USART简介+2.USART基本结构+3.数据帧+4.起始位侦测+5.数据采样+6.波特率发生器)
- 期货开户加一分高交返靠谱吗?
- 概率论小课堂:伯努利实验(正确理解随机性,理解现实概率和理想概率的偏差)