java mqtt协议_基于 tio 实现 mqtt5 协议之 micamqtt
一、簡介
MQTT 全稱為 Message Queuing Telemetry Transport(消息隊列遙測傳輸)是一種基于發(fā)布/訂閱范式的“輕量級”消息協(xié)議,由 IBM 發(fā)布。
目前使用比較廣泛的就是 mqtt 3.1.1(2014年制定),mqtt 5.0(2018年制定),Mqtt5特性詳見:https://www.emqx.io/cn/mqtt/mqtt5
二、mica-mqtt
為了深入了解 mqtt 協(xié)議的,在今年 9 月左右基于 t-io 開發(fā)了 mica-mqtt,mqtt 編解碼直接基于 netty codec-mqtt 模塊進行的調整,當時 netty 還不支持 mqtt5 協(xié)議。
netty 的 codec-mqtt 比較成熟,大多數(shù) java 的 mqtt-broker 也是基于它實現(xiàn)的。下面我主要介紹我是如何將 netty 的 codec-mqtt 移植到 t-io 的。
三、mqtt5協(xié)議移植
前 2 周發(fā)現(xiàn) netty 的 codec-mqtt 已經支持 mqtt5 協(xié)議了,花了一點時間對它進行了升級,下面跟我一起來看看我是怎么處理的。
3.1 copy 源碼
先直接 copy 源碼,對代碼進行初步的調整,
3.2 ByteBuf 轉 ByteBuffer
netty 中采用 ByteBuf 來解析協(xié)議,t-io 則是使用的 ByteBuffer,那么我們最大的任務就是將 ByteBuf 轉成 ByteBuffer 了。
ByteBuf vs ByteBuffer 方法對比
| writeByte | put |
| writeBytes | put |
| writeShort | putShort |
| writeInt | putInt |
| getByte | get |
| getBytes | get |
| getShort | getShort |
| getInt | getInt |
3.3 mqtt5 encodeProperties 處理
由于 ByteBuffer 是定長的,初始化的時候就需要指定長度,在 encodeProperties 我自定義了一個WriteBuffer做數(shù)據(jù)承載,最后轉成byte[]返回。
圖片圖示WriteBuffer
圖片WriteBuffer底層是 t-io 自帶原作者為 biezhi(王爵)同學的FastByteBuffer。
圖片四、效果(mqtt5協(xié)議)
4.1 使用 MQTTX 客戶端
4.2 使用 mica-mqtt 客戶端
五、待辦
由于精力有限,mica-mqtt 目前還屬于試驗性質。希望有更多的同學可以參與進來。
說明:另外可以參考 zbus 來處理消息或者實現(xiàn)內部的集群。
六、關于 t-io
t-io 是一款簡單、高性能、低延遲的網絡中臺。t-io 解決了其它網絡框架沒有解決的用戶痛點,幫助企業(yè)節(jié)約大量人力成本。
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【算法】一个简单的线性判别分析(LDA)
- 下一篇: 【算法】一个简单的主成分分析(PCA)原