概述

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

MQTT协议学习资料:https://www.emqx.cn/mqtt  (文章列表在网页比较靠下的部分)

https://blog.csdn.net/emqx_broker/category_9467860.html

库的使用

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

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。

paho.mqtt.c简单介绍相关推荐

  1. Paho mqtt C语言库介绍

    目录 Paho库目录文件介绍 Paho库常用函数介绍 MQTTConnectClient中的常用函数 MQTTConnectServer中的常用函数 MQTTDeserializePublish中的常 ...

  2. paho mqtt java_MQTT之Eclipse.Paho源码(一)--建立连接

    写在前面 通过上一个章节MQTT系列---Java端实现消息发布与订阅的介绍,我们已经基本构建出一个可以简单通信的MQTT生产和消费服务,并且具备基本的发布/订阅消息功能.那么从本章开始,我们将从源代 ...

  3. Eclipse Paho MQTT Python Client 使用手册

    Eclipse Paho MQTT Python Client 使用手册 原文地址:https://www.cooooder.com/archives/20210303 目录 介绍 环境 准备 快速开 ...

  4. ActiveMQ此例简单介绍基于docker的activemq安装与集群搭建

    ActiveMQ拓展连接 此例简单介绍基于Docker的activemq安装与集群搭建 一 :安装 1.获取activemq镜像 docker pull webcenter/activemq 2.启动 ...

  5. MQTT与paho.mqtt

    MQTT协议 采用发布/订阅消息模式 使用TCP/IP提供网络连接 三种消息发布服务质量QoS,消息推送的原则,服务器维护难度递增 至多一次 至少一次 只有一次 主题的分割符与通配符 分割符" ...

  6. MQTT-Eclipse paho mqtt源码分析-连接MQTT Broker

    Eclipse paho mqtt源码分析 MQTT paho mqtt 源码分析 org.eclipse.paho.client.mqttv3.MqttClient MQTT MQTT(消息队列遥测 ...

  7. 小程序paho.mqtt连接微消息队列 MQTT 版

    物联网项目现在越来越多,MQTT的使用场景也越来越广泛,同时遇到的技术问题也是越来越复杂. 最近在做一个小程序连接阿里云的微消息队列MQTT版,说实话,通过这次debug,发现阿里的技术文档很多方面不 ...

  8. cmake:解决MSVC下/MT 编译paho.mqtt.c的问题

    paho.mqtt.c是eclipse开发的C语言跨平台mqtt client 开源库,之前写过一篇博客<cmake:VS2015和GCC编译paho.mqtt C/C++ client> ...

  9. MQTT心跳机制介绍

    在医院里,医生利用心跳来判断患者是否还有生命体征.对于MQTT服务器来说,它要判断一台MQTT客户端是否依然保持连接可以检查这台客户端是不是经常发送消息给服务端.如果经常收到客户端的消息,那么没问题, ...

最新文章

  1. JDBC连接mysql数据的7个步骤(讲解+源码)
  2. node遍历给定目录下特定文件,内容合并到一个文件
  3. python scikit库
  4. Python笔记---错误笔记
  5. ubuntu 怎么格式化U盘?(转载)
  6. SwiftUI Button精品组件之完美的SwiftUI抖动按钮效果(教程含源码)
  7. java messagedigest,在C#中的Java MessageDigest类
  8. diy服务器个人主机_DIY双路服务器之个人主机
  9. zblog html代码,简单快速修改zblog模板的重要代码
  10. Android开发中遇到的坑
  11. ios 拍照人像识别_Google相册为iOS用户添加了人像深度编辑和色彩弹出功能
  12. html 图片摆动效果,CSS摆动/摇动效果
  13. MQTT学习笔记——Yeelink MQTT服务 使用mqtt.js和paho-mqtt
  14. 手机怎样测海拔高度?手机测量海拔的方法分享。
  15. css背景图重复怎们弄,CSS如何实现背景图像重复效果
  16. 大学计算机基础 教学要求,《大学计算机基础》课程教学大纲
  17. 【洛谷】p5707上学迟到 C语言
  18. OLED显示屏与Arduino接口
  19. 盒子模型之京东快报页面
  20. Go-包管理(管理工具对比及go mod的使用)

热门文章

  1. 货币政策对于股市涨跌影响
  2. 单例模式中的懒汉式和饿汉式对比
  3. Python Redis Stream 消息队列 消费组
  4. Go语言自学系列 | golang结构体
  5. 饿了么、百度、 美团外卖系统网上订餐
  6. 模电——零欧姆电阻的作用
  7. 如何解决ubuntu16.04下载网速慢的问题
  8. 前后端分离项目,vue+uni-app+php+mysql图书购物商城系统(H5移动项目) 开题报告
  9. 在Unity中构建Pong克隆:UI和游戏玩法
  10. 如何评估一个创业点子