MQTT与paho.mqtt

MQTT协议

  • 采用发布/订阅消息模式

  • 使用TCP/IP提供网络连接

  • 三种消息发布服务质量QoS,消息推送的原则,服务器维护难度递增

    • 至多一次
    • 至少一次
    • 只有一次
  • 主题的分割符与通配符

    • 分割符"/":为方便主题管理与扩展,mqtt的主题是有路径的,以"/"分割
    • 通配符"#":表示层次结构的完整子树,比如SENSOR/#,因此"#"只能为最后一个字符
    • 通配符"+":标识层次结构的单个级别,用于分隔符之间,比如SENSOR/+/TEMP

库(paho.mqtt.c)

根据推荐找到paho项目的mqtt的c库与cpp库,因为接口较为简单,且cpp库建立在c库上,所以直接使用c库paho.mqtt.c。
paho.mqtt.c 提供了两种模式——同步模式和异步模式。

同步模式

单线程,线程不安全,接收需要循环遍历,特点是简单

特性接口

  • 服务质量为"至少一次"和"恰好一次",publish时由于可能涉及重发必须调用MQTTClient_waitForCompletion()
  • 接收通知,需要循环调用MQTTClient_receive() 或者MQTTClient_yield()以判断是否有数据通知
  • MQTTClient_subscribeMany 支持以二位数组的方式批量订阅,其他Many也是一样的,异步同
  • 函数以及结构体以5结尾的表示是MQTT V5的接口与数据类型,异步同

例程

同步publish:https://www.eclipse.org/paho/files/mqttdoc/MQTTClient/html/pubsync.html

异步模式

多线程,线程安全,所有消息都以回调形式返回,特点非阻塞,适用于界面编程,且功能齐全

自动重连设置

  • 开启条件:MQTTAsync_connectOptions::automaticReconnect设置为非零,

  • 重连时间间隔:从最小重连时间间隔(默认为1s)开始,每失败一次,时间翻倍,直到重连时间大于最大重连时间间隔(默认为60s),可以通过MQTTAsync_connectOptions::minRetryIntervalMQTTAsync_connectOptions::maxRetryInterval进行设置。

  • 重连成功会回调MQTTAsync_connected

持久性发布设置

解释:publish不成功,一直发布,直到断开连接

  • 开启条件:使用MQTTAsync_createWithOptions而不是MQTTAsync_create来创建客户端对象。将MQTTAsync_createOptions::sendWhileDisconnected设置为非零,并设置MQTTAsync_createOptions::maxBufferedMessages(默认值100)。
  • 可以调用MQTTAsync_getPendingTokens来返回等待发送的消息的id,或者返回发送过程尚未完成的消息的id。

例程

SSL支持

  • 开关:struct MQTTClient_init_options::do_openssl_init
  • 配置:struct MQTTClient_connectOptions::ssl

日志设置

  • 日志文件输出开关(MQTT_C_CLIENT_TRACE):存储的文件名,ON/stdout输出到标准输出

  • 日志级别设置(MQTT_C_CLIENT_TRACE): 7个级别,FATAL 、SEVERE、ERROR, PROTOCOL, MINIMUM, MEDIUM,MAXIMUM

  • 例子:

    MQTT_C_CLIENT_TRACE=ON
    MQTT_C_CLIENT_TRACE_LEVEL=PROTOCOL
    
  • 接口

    //同步模式
    typedef void MQTTClient_traceCallback(enum MQTTCLIENT_TRACE_LEVELS level, char *message)
    void 	MQTTClient_setTraceLevel (enum MQTTCLIENT_TRACE_LEVELS level);
    void 	MQTTClient_setTraceCallback (MQTTClient_traceCallback *callback);
    //异步模式
    typedef void MQTTAsync_traceCallback(enum MQTTASYNC_TRACE_LEVELS level, char *message)
    void 	MQTTAsync_setTraceLevel (enum MQTTASYNC_TRACE_LEVELS level)
    void 	MQTTAsync_setTraceCallback (MQTTAsync_traceCallback *callback)
    

资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值