paho.mqtt.c简单介绍_api接口

概述

paho.mqtt.c 是Eclipse编写的开源mqtt c库,支持Posix标准操作系统(如Linux,Android,Mac)和windows操作系统。

Paho MQTT C客户端支持全部MQTT协议客户端特性,它使用ANSI标准C编写。

实际上这个库提供两套API,分别是"同步"的MQTTClient和“异步”的MQTTAsync,同步API目的是更加简单、更加有用的。为了达到这个目的,部分操作将被阻塞,直到这个操作完成,这样程序的框架更加简单。

相反,在异步模式中只有一个调用会被阻塞——waitForCompletion。异步模式都是通过回调函数返回结果,这样更适合那些不是控制主线程的应用。

源码下载:https://github.com/eclipse/paho.mqtt.c (速度很慢)

国内的源码镜像:https://gitee.com/mirrors/paho.mqtt.c (速度起飞)

官方文档:https://www.eclipse.org/paho/files/mqttdoc/MQTTClient/html/index.html​​

库的使用

这个Paho C客户端编译完后一共生成四种类型的库(静态库或者动态库可选):

paho.mqtt.c简单介绍_paho.mqtt.c_02

paho-mqtt3a :异步API接口的库,API函数都是以MQTTAsync开头,API函数定义在MQTTAsync.h。

paho-mqtt3as :异步API接口的库,API函数都是以MQTTAsync开头,API函数定义在MQTTAsync.h,这个库默认带有TLS加密功能,同时也需要openssl库支持,才能使用这个库。

paho-mqtt3c :同步API接口的库,API函数都是以MQTTClient开头,API函数定义在MQTTClient.h。

paho-mqtt3cs :同步API接口的库,API函数都是以MQTTClient开头,API函数定义在MQTTClient.h,这个库默认带有TLS加密功能,同时也需要openssl库支持,才能使用这个库。

MQTTClient同步和异步模式并存

虽然paho.mqtt.c存在两种模式API接口,一个是异步的MQTTAsync,另一个是同步的MQTTClient。但这里说的同步和异步并不是绝对的。在MQTTClient接口中,应用程序依然可以通过MQTTClient_setCallbacks()接口函数将一些操作设置为异步模式,比如失去连接,接收订阅消息和接收发布消息交付的结果。

在MQTTClient的同步模式中,客户端应用代码运行在一个单个的线程中,消息通过MQTTClient_publish() 和MQTTClient_publishMessage() 两个函数进行发布。可以通过MQTTClient_waitForCompletion() 函数去确定Qos1和Qos2类型的消息是否被成功的交付到服务器。

可以使用MQTTClient_receive()函数进行同步模式下接收一个消息。为了可以处理一些需要回复的应答和保持网络连接的MQTT "ping"消息,应用程序必须以一定的频率去调用MQTTClient_receive() 或者 MQTTClient_yield() 函数。

在MQTTClient的异步模式中,客户端运行在多个线程上。主程序可以向同步模式一样调用客户端的库函数进行,发布和订阅消息,但是对于一些握手和网络连接维护的操作在后台进行。状态的通知和被接收的消息,通过由MQTTClient_setCallbacks()(包括MQTTClient_messageArrived(), MQTTClient_connectionLost() 和MQTTClient_deliveryComplete())注册的回调函数提供。这些API不是线程安全的,不能在没有同步机制的多线程下面进行调用。对于线程安全的函数可以使用MQTTAsync中的API。