创作

完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>

3天内不再提示

使用MQTT作为进程间通信的方式

zlCj_str 来源:CSDN技术社区 作者:CSDN技术社区 2020-10-22 12:09 次阅读

小编对Linux这一块的实际开发经验虽然还不是很足,但也知道进程间通信有那么几种方式:管道、消息队列、共享内存、套接字等。

某项目中使用了MQTT作为进程间的通信方式,感觉很新颖,网上好像也比较少有看到使用MQTT来作为进程间通信的方式的。这两篇笔记我们就来一起学习一下这种方式。

MQTT的一些介绍

MQTT 协议全称是 Message Queuing Telemetry Transport,翻译过来就是消息队列遥测传输协议,它是物联网常用的应用层协议,运行在 TCP/IP 中的应用层中,依赖 TCP 协议,因此它具有非常高的可靠性,同时它是基于 TCP 协议的<客户端-服务器>模型发布/订阅主题消息的轻量级协议。

1、MQTT通信模型

MQTT协议是基于客户端-服务器模型,在协议中主要有三种身份:发布者(Publisher)、服务器(Broker) 以及订阅者(Subscriber)。 并且消息发布者可以同时是订阅者 。

MQTT 消息的发布者和订阅者都是客户端,服务器只是作为一个中转的存在,将发布者发布的消息进行转发给所有订阅该主题的订阅者。

MQTT 客户端的功能:

发布消息给其它相关的客户端。

订阅主题请求接收相关的应用消息。

取消订阅主题请求移除接收应用消息。

从服务端终止连接。

MQTT 服务器常被称为 Broker(消息代理) 。它的功能有:

接受来自客户端的网络连接请求。

接受客户端发布的应用消息。

处理客户端的订阅和取消订阅请求。

转发应用消息给符合条件的已订阅客户端(包括发布者自身)。

2、MQTT消息

MQTT所发的消息包含:主题+内容,客户端可以订阅任意主题,若有其它客户端发布主题时符合所订阅的主题,就会由网关发送到客户端。

「什么是主题?」

MQTT 服务器为每个连接的客户端(订阅者)添加一个标签,该标签与服务器中的所有订阅相匹配, 服务器会将消息转发给与标签相匹配的每个客户端。这样的一个标签就是主题。

「服务质量:」

MQTT提供三种服务质量(Quality of Service,简写QoS),供开发者根据不同的情景选择不同的服务级别:

QoS0:最多发送一次消息,在消息发送出去后,接收者不会发送回应,发送者也不会重发消息。

QoS1:最少发送一次消息(消息最少需要送达一次,也有可送达多次), QoS 1的 PUBLISH 报文的可变报头中包含一个报文标识符,需要 PUBACK 报文确认。

QoS2:这是最高等级的服务质量,消息丢失和重复都是不可接受的。只不过使用这个服务质量等级会有额外的开销,这个等级常用于支付中,因为支付是必须有且仅有一次成功,总不能没给钱或者给了多次钱吧。

mosquitto的使用

1、mosquitto简介

mosquitto是一款开源的MQTT消息代理(服务器)软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机、嵌入式计算机、微型控制器等移动设备。

2、mosquitto实践

从以上链接下载mosquitto源码,得到:

在mosquitto路径下,依次输入如下命令编译:

mkdirbuild cdbuild cmake../ make

若未安装cmake则需要自行安装,可参考往期文章:《面试官:Linux下如何编译C程序?》

若执行cmake ../指令时出现Could NOT find OpenSSL的问题:

可输入如下命令安装OpenSSL(Ubuntu下):

sudo apt-get install libssl-dev

执行make编译完成后,我们可以看到build目录下的client与src文件夹下会生成一些可执行文件:

我们重点关注mosquitto_pub、mosquitto_sub、mosquitto这三个可执行文件。其中mosquitto是服务器软件,mosquitto_pub是发布者客户端,mosquitto_sub订阅者客户端。

下面我们来简单测试一下:

其中,mosquitto_pub对应的源文件为mosquitto/client/pub_client.c,mosquitto_sub对应的源文件为mosquitto/client/sub_client.c,感兴趣的朋友可自行阅读学习。

这个示例其实就是两个进程间的通信,前提是需要一个本地代理服务器。如果需要应用于我们嵌入式Linux中的进程间通信,需要使用交叉编译器编译出一个可运行在我们的arm板上的mosquitto服务器。

责任编辑人:CC

  • MQTT
    +关注

    关注

    4

    文章

    203

    浏览量

    18771
  • MQTT协议
    +关注

    关注

    0

    文章

    35

    浏览量

    3954
收藏 人收藏

    评论

    相关推荐

    怎样通过W5500连接阿里云IOT并实现MQTT的功能呢

    最近在做瑞萨RA6M4 的rt-thread项目。 项目是通过W5500连接阿里云IOT。实现MQTT的功能。因示例中使用了RW007wifi模...
    发表于 06-24 14:17 439次 阅读

    MQTT例程和DHCP例程结合起来就出现了问题是什么原因?

    异常出来了,但是我不知道在文档里那个寄存器中看这个异常的码,有没有人看看这个异常0x1D和0x17     &nb...
    发表于 06-23 07:24 37次 阅读

    mqttclient跨平台MQTT客户端

    ./oschina_soft/gitee-mqttclient.zip
    发表于 06-21 11:55 13次 阅读
    mqttclient跨平台MQTT客户端

    NanoMQ边缘MQTT消息服务器

    ./oschina_soft/gitee-nanomq.zip
    发表于 06-15 09:27 17次 阅读
    NanoMQ边缘MQTT消息服务器

    请问CH561可以跑freeRTOS和MQTT么?

    请问CH561可以跑freeRTOS和MQTT么?      ...
    发表于 06-13 06:05 62次 阅读

    求一种基于NUC980IOT开发板空气质量检测电路的设计方案

    ● 项目描述! 采用NUC980IOT开发板实现空气质量检测并上传MQTT服务器,只要订阅相关主题的移动终端都可以实时接收查...
    发表于 06-07 09:39 714次 阅读

    MQTT协议3.1.1中文版

    使用 MQTT 的程序或设备。客户端总是通过网络连接到服务端。它可以  发布应用消息给其它相关的....
    发表于 06-07 09:37 11次 阅读

    小凌派RK2206开发板:实现基于OpenHarmony的本地MQTT协议

           一、MQTT协议简介 MQTT(消息队列遥测传输)是一个基于客户端-服务器的消息发布/....
    的头像 海阔天空的专栏 发表于 05-27 09:33 431次 阅读
    小凌派RK2206开发板:实现基于OpenHarmony的本地MQTT协议

    mqtt协议怎么用?以MQTT3.1协议ESP8266连接阿里云物联网平台

    MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协....
    的头像 嵌入式技术 发表于 05-25 18:32 2270次 阅读
    mqtt协议怎么用?以MQTT3.1协议ESP8266连接阿里云物联网平台

    mqtt线程卡死导致publish消息无反应是什么原因导致的?

    硬件平台: STM32F407+LAN8740A 软件平台:4.0.3+pahomqtt1.1.0 复现方法:断开路由器外网网线 问题现象:mqtt线程卡...
    发表于 05-24 15:14 2285次 阅读

    物通博联·KEPSeverEX采集转MQTT指南

    JRE 软件安装 下载软件后双击,注意此软件安装后需要重启电脑,此软件不安装的话 KEPSever....
    发表于 05-24 15:00 38次 阅读

    ESP8266模块在 rtt 中的使用资料推荐(二)

    1、如何调用mqtt协议及连接onenet云平台 配置evn工具 2、http 的get和post请求实现 这一节讲http 的get和post请求,...
    发表于 05-20 09:42 1228次 阅读

    物通博联MQTT网关快速对接云平台使用手册

      工业智能网关,是一款有多个网口和多个串口,支持5G/4G/3G/WIFI/PPPOE/ether....
    发表于 05-19 10:51 67次 阅读

    请问技术大佬们,CH32V307 MQTT例程有吗?

    RT,还有TCP UDP例程开头都没有提示需要配置FLASH和RAM大小,还好UART SERVER例程提示了,TCP CL...
    发表于 05-19 06:12 165次 阅读

    【小凌派RK2206开发板试用体验】小凌派手势应用之原力控制星球大战BB-8机器人

    在上一篇文章中,我分享了  ,这次再给大家分享一个更有趣的智能手势应用----小凌派RK2206开发板赋予你原力,隔空控...
    发表于 05-11 12:52 9132次 阅读
    【小凌派RK2206开发板试用体验】小凌派手势应用之原力控制星球大战BB-8机器人

    求助,mymqtt软件包是否支持多主题订阅及发布?

    目前用my_mqtt软件包做的单主题订阅已经调通,但是当把主题数量增加时就会报错,想到之前看到个帖子说paho_mqtt V1.1.0只支持1个...
    发表于 05-09 09:46 1126次 阅读

    kawayi mqtt连接mosquitto始终连接不上怎么解决?

    各位大咖好,遇到难点了,求助! 之前用lwip+phy调试和pc互ping没问题,现在在此基础上增加了kawayi mqtt软件包,尝试连接创建的...
    发表于 05-06 09:50 1700次 阅读

    Zigbee2mqtt将Zigbee转化成MQTT

    zigbee2mqtt.zip
    发表于 04-20 10:51 104次 阅读
    Zigbee2mqtt将Zigbee转化成MQTT

    smart-mqtt MQTT Broker服务

    gitee-smart-mqtt.zip
    发表于 04-20 10:46 75次 阅读
    smart-mqtt MQTT Broker服务

    Apache RocketMQ MQTT协议架构模型

    rocketmq-mqtt.zip
    发表于 04-20 10:45 48次 阅读
    Apache RocketMQ MQTT协议架构模型

    基于Netty开发的SMQTT

    gitee-mqtt-cluster.zip
    发表于 04-20 10:29 25次 阅读
    基于Netty开发的SMQTT

    Gmqtt高性能MQTT代理库

    gmqtt.zip
    发表于 04-20 10:22 39次 阅读
    Gmqtt高性能MQTT代理库

    EMQX MQTT消息服务器

    emqx.zip
    发表于 04-20 10:05 45次 阅读
    EMQX MQTT消息服务器

    OpenMQTTGateway MQTT网关

    OpenMQTTGateway.zip
    发表于 04-20 10:03 74次 阅读
    OpenMQTTGateway MQTT网关

    MQTT.Chat开源的MQTT消息传递代理

    gitee-MQTT.Chat.zip
    发表于 04-20 09:58 38次 阅读
    MQTT.Chat开源的MQTT消息传递代理

    基于OpenHarmony平台的MQTT库

    该库是在Paho MQTT的基础上,进行移植修改,支持鸿蒙系统。 此存储库包含嵌入式平台的Eclip....
    发表于 04-12 11:10 47次 阅读

    Lierda云管端协作让万物互联更简单(一)

    随着物联网行业的快速发展,涌现出越来越多物联网云服务平台。如何快速实现应用开发,如何管理,如何让设备....
    的头像 利尔达科技集团 发表于 04-02 17:28 557次 阅读
    Lierda云管端协作让万物互联更简单(一)

    串口服务器连接MQTT服务器方法说明

    串口服务器连接MQTT服务器方法参考“串口服务器用户手册”,不再重复说明。
    发表于 03-30 09:58 936次 阅读
    串口服务器连接MQTT服务器方法说明

    HTTP及MQTT比较分析

    MQTT(消息队列遥测传输)是ISO标准(ISO/IEC PRF 20922)下基于发布/订阅范式的....
    的头像 厦门市物联网行业协会 发表于 03-25 14:00 1327次 阅读

    STM32+ESP8266连接腾讯IOT微信小程序一键配网

    次我以智能锁为产品模型,在腾讯物联网平台创建一个设备,使用STM32F103系统板+ESP8266+....
    的头像 DS小龙哥-嵌入式技术 发表于 03-18 09:20 7441次 阅读
    STM32+ESP8266连接腾讯IOT微信小程序一键配网

    强大的MQTT Broker-HiveMQ

    连接设备的可靠数据传输HiveMQ的MQTT代理能够以高效、快速和可靠的方式轻松地将数据移入和移出连....
    发表于 03-09 16:45 5次 阅读

    如何移植MQTT物联网通信协议

    本文简单介绍如何移植MQTT
    的头像 HarmonyOS官方合作社区 发表于 03-03 09:26 969次 阅读
    如何移植MQTT物联网通信协议

    网关对接基于MQTT的MES系统与云平台解决方案

    随着物联网技术和工业4.0时代的到来,工厂智能化运营已经成为企业的必选方案;通过工业智能网关和数据平....
    发表于 02-17 13:42 122次 阅读

    【技术分享】以利尔达MB960/860模组为例,教你快速接入MQTT协议(上)

    LIERDA随着5G时代的来临,万物互联的伟大构想正在成为现实。2021年全球智能物联网处于爆发式增....
    的头像 利尔达科技集团 发表于 02-14 09:49 25次 阅读
    【技术分享】以利尔达MB960/860模组为例,教你快速接入MQTT协议(上)

    一款支持Sparkplug协议的MQTT网关

    一款支持Sparkplug协议的物联网网关
    发表于 01-25 10:49 250次 阅读
    一款支持Sparkplug协议的MQTT网关

    Modbus转MQTT网关金鸽BL101如何实现将Modbus串口设备的数据上传至亚马逊AWS

    概述 BL101是一款Modbus RTU、Modbus TCP转换为Modbus TCP、OPC ....
    发表于 01-14 13:46 129次 阅读
    Modbus转MQTT网关金鸽BL101如何实现将Modbus串口设备的数据上传至亚马逊AWS

    无线通讯协议MQTT的详细说明

    无线通讯协议MQTT的详细说明
    发表于 01-10 09:42 200次 阅读

    基于STM32的远程预付费电能监测系统设计与应用

    本文设计一种基于MQTT服务器的远程电能监测系统,该系统能对用户终端的电压、电流、功率、总电能及功率....
    发表于 01-06 09:07 1364次 阅读

    (二)STM32上传数据到阿里云网页

    接上一篇stm32连上阿里云 ,本文介绍如何用阿里云的Iot Studio制作web网页。并用产品自....
    发表于 12-29 18:59 196次 阅读
    (二)STM32上传数据到阿里云网页

    基于ESP8266,NodeMCU的自动升级的MQTT客户端

    从头开始,构建完整的物联网平台。
    发表于 12-28 19:21 98次 阅读
    基于ESP8266,NodeMCU的自动升级的MQTT客户端

    NodeMCU 通过MQTT 连接阿里云物联网

    NodeMCU 通过MQTT 连接阿里云物联网1.NodeMCU固件的选择及刷入ESP8266112....
    发表于 12-28 19:19 216次 阅读
    NodeMCU 通过MQTT 连接阿里云物联网

    KEPServerEX与MES对接的几种方式

    KEPServerEX是行业先进的连接平台,用于向客户所有的应用程序提供单一来源的工业自动化数据。
    发表于 12-28 18:17 371次 阅读

    stm32 freetos堆空间和启动文件堆空间

    最近在做公司的一个项目,遇到堆空间不足导致单片机卡死的问题。板子是stm32f407ve,ram19....
    发表于 12-27 18:44 105次 阅读
    stm32 freetos堆空间和启动文件堆空间

    单片机 MQTT 读取数据问题(串口通信)

    单片机 MQTT 读取数据问题(串口通信)问题描述使用stm32F10x单片机串口接收数据时,接收中....
    发表于 12-20 19:35 162次 阅读
    单片机 MQTT 读取数据问题(串口通信)

    智能家居照明系统设计

    目录简介设计方案简介本设计通过多点无线通信、WIFI模块、云平台、以及人体传感器、光敏传感器等信息技....
    发表于 12-17 18:17 121次 阅读
    智能家居照明系统设计

    8226基于nodemcu通过mqtt协议发送接收消息

    一过完年即将陷入一场恶战之中,可能无暇在玩这么多东西了,趁着过年把之前一直想搞的mqtt协议给玩一玩....
    发表于 12-17 18:02 119次 阅读
    8226基于nodemcu通过mqtt协议发送接收消息

    nodemcu通过MQTT协议进行通讯

    nodemcu介绍nodemcu是一款开源快速硬件原型平台,包括固件和开发板,用几行简单的Lua脚本....
    发表于 12-17 17:57 119次 阅读
    nodemcu通过MQTT协议进行通讯

    嵌入式开发|基于STM32+GPRS(AT指令模组实现)实现MQTT通信

    前言mqtt属于上层协议,与http属于同一层。建立在TCP之上的,因此所有的可以建立TCP通信的模....
    发表于 12-14 19:12 120次 阅读
    嵌入式开发|基于STM32+GPRS(AT指令模组实现)实现MQTT通信

    智慧农业: STM32F103ZE+ESP8266+腾讯云物联网平台+微信小程序设计

    一、环境介绍单片机采用:STM32F103ZET6上网方式:采用ESP8266,也可以使用其他设备代....
    发表于 12-08 13:51 257次 阅读
    智慧农业: STM32F103ZE+ESP8266+腾讯云物联网平台+微信小程序设计

    MQTT移植到stm32开发板——使用TencentOS tiny操作系统

    手把手教你将MQTT客户端移植到stm32开发板上,使用TencentOS tiny官方开发板——T....
    发表于 12-08 13:21 206次 阅读
    MQTT移植到stm32开发板——使用TencentOS tiny操作系统

    modbus转MQTT协议网关RS485串口接入华为云

    modbus转MQTT协议网关RS485串口一键快速接入华为云金鸽BL101E
    发表于 12-06 15:01 383次 阅读
    modbus转MQTT协议网关RS485串口接入华为云

    modbus转MQTT支持TCP以太网通讯接入阿里华为云

    modbus转MQTT支持TCP以太网通讯接入阿里华为云
    发表于 12-06 14:33 287次 阅读
    modbus转MQTT支持TCP以太网通讯接入阿里华为云

    基于STM32L431设计的云端绿化管理系统(ESP8266+阿里云物联网平台)

    基于STM32L431设计的云端绿化管理系统(ESP8266+阿里云物联网平台)
    发表于 12-06 10:06 223次 阅读
    基于STM32L431设计的云端绿化管理系统(ESP8266+阿里云物联网平台)

    STM32F103_IOT物联网开发板学习专栏3_STM32F103控制LED灯

    STM32F103_IOT物联网开发板学习专栏3_STM32F103控制LED灯
    发表于 12-03 17:51 190次 阅读
    STM32F103_IOT物联网开发板学习专栏3_STM32F103控制LED灯

    RS485或者rs232串口设备如何上传mqtt平台

    RS485或者rs232串口设备如何上传mqtt平台
    发表于 12-03 17:03 586次 阅读

    PLC网关的价格优势

    PLC网关的价格优势
    发表于 12-01 14:47 117次 阅读

    三菱FX-5U数据转成MQTT上报

    主要讲述PLC网关BL102与FX5U通讯的示例
    发表于 11-29 14:16 150次 阅读
    三菱FX-5U数据转成MQTT上报

    STM32与SIM800连接百度物接入MQTT服务器教程

    前言:  本文介绍如何运用STM32F103与SIM800C组成的设备端连接百度物接入的教程,文章中....
    发表于 11-23 17:51 252次 阅读
    STM32与SIM800连接百度物接入MQTT服务器教程