Thingsboard 基于netty的mqtt
什么是mqtt?
消息队列嵌入式传输端口(MQTT )构建在TCP/IP协议上,MQTT是一种基于1999年发布/订阅模式的轻量级通信协议,它的最大优点是较少作为低开销、低带宽的即时消息传递协议,MQTT广泛用于物联网、小型设备、移动APP应用等方面。
- 消息质量(QoS):至多一次、至少一次、只有一次
- MQTT的消息类型(Message Type):
- 遗言机制: Last Will:即遗言机制,用于通知同一主题下的其他设备发送遗言的设备已经断开了连接;Testament:遗嘱机制,功能类似于Last Will
Mqtt服务器主题
- 遥测 v1/devices/me/telemetry
- 属性 v1/devices/me/attributes
- 请求
- 响应
- Rpc
Mqtt消息类型
PUBACK,PUBREC,PUBREL,PUBCOMP,SUBSCRIBE,SUBACK,UNSUBSCIBE,UNSUBACK
什么是netty?
Netty骄傲的地方就是内存池的管理,从4.0版本开始经常变改,虽是直接内存IO框架的绝配,但直接内存的分配销毁不易,所以使用内存池能大幅提高性能,也告别了频繁的GC。
Netty里四种主力的ByteBuf:
UnpooledHeapByteBuf ,内部的byte[]能够依赖JVM GC自然回收,每次I/O读写都会创建一个新的UnpooledHeapByteBuf,频繁进行大内存分配和回收
UnpooledDirectByteBuf ,内部是DirectByteBuffer,但相比于堆内内存申请和释放,成本要高一些。
PooledHeapByteBuf ,必须要主动将用完的byte[]放回池里,否则内存就要爆掉。
PooledDirectByteBuf ,必须要主动将用完的ByteBuffer放回池里,否则内存就要爆掉。
Netty架构
netty是基于reactor模式的NIO框架
基于netty搭建mqtt服务
与TCP服务的区别:1 建立维护链接(session) 2 依据消息类型,做不同的处理(msg.fixedHeader().messageType()) 3 建立维护订阅列表 (topic-> sub)
serverBootstrap
MqttTransportServerInitializer
MqttTransportHandler
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
2019-07-18 Flink初识
2019-07-18 Map集合探索续集