XuLizhao 's Notes

时光,漫步


  • 首页

  • 技术

  • 文档

  • 关于

  • 搜索
close

mqtt轻量级发布订阅协议

时间: 2019-08-26   |   分类: tech     |   阅读: 775 字 ~2分钟

轻量级发布订阅协议MQTT介绍。

MQTT协议

MQTT(消息队列遥测传输)是一个应用层协议,基于TCP/IP协议。使用发布-订阅模式用户客户端和其他端的通讯。

客户端可订阅一个或多个主题/topic, #用于多个主题, +用于单个.

广泛应用于物联网领域。

通常使用1883端口作为默认端口,如果开启SSL,TCP端口是8883。

服务等级

常用服务等级分为3级,级别越高,性能损耗越大,但同时可靠性越高。

  • QoS = 0 - means one delivery at most,The receiver gets the message either once or not at all.
  • QoS = 1 - means one delivery at least. 可能存在重复消息
  • QoS = 2 - means one delivery exactly.

保活

MQTT客户端可以一直保持连接状态,即使不发布或接受任何消息。

但是Broker需要追踪哪些客户端还在连接,所以需要知道何时发送Last Will and Testament (LWT)消息给客户端。

这时候用到了keepalive时间,即每次客户端接受或发送一个消息时,broker重置一个计时器,如果计时器超过1.5倍的保活(keepalive)时间,则标记客户端为已断开并处理LWT。

为阻止低频率消息客户端被断开连接,broker会在计时器到达keepalive时间时发送PINGREQ包到客户端,如果收到客户端的PINGRESP回包,会重置计时器到0,代表客户端仍处于连接状态。

客户端

最常用的客户端应该是paho,对应各种常见语言的版本及安卓版,可以去官方仓库查找。

  • Python: paho.mqtt.python
  • Go:paho.mqtt.golang
  • Java: paho.mqtt.java

GUI

  • MQTT Explore
  • MQTTX

Python客户端

pip install paho-mqtt

对于python客户端,连接时会遇到错误码,对应关系如下:

  • 0: Connection successful
  • 1: Connection refused - incorrect protocol version
  • 2: Connection refused - invalid client identifier
  • 3: Connection refused - server unavailable
  • 4: Connection refused - bad username or password
  • 5: Connection refused - not authorised

Java客户端

从mqtt收发必须实现接口IMqttClient,Paho库自带:

  • MqttAsyncClient:异步实现
  • MqttClient: 同步实现

用法

既然是订阅,最常用到的就是topic,其中通配符主题用 # 表示。

Server实现

扩展阅读

  • MQTT
  • Eclipse MQTT演示服务: mqtt.eclipse.org
  • 本文作者: xulizhao
  • 本文链接: https://xulizhao.com/blog/mqtt/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
#message#
了解VOIP
开源反向代理及负载均衡Envoy初探
  • 文章目录
  • 站点概览

xulz

时光,漫步

56 日志
3 分类
28 标签
  • MQTT协议
    • 服务等级
    • 保活
  • 客户端
    • GUI
    • Python客户端
    • Java客户端
  • 用法
  • Server实现
  • 扩展阅读
© 2017 - 2023 XuLizhao 's Notes
Powered by - Hugo/ NexT
津ICP备17010344号-1
0%