0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

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

3天内不再提示

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

strongerHuang 来源: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
    +关注

    关注

    5

    文章

    657

    浏览量

    22944
  • MQTT协议
    +关注

    关注

    0

    文章

    98

    浏览量

    5571

原文标题:简单认识认识mqtt及mosquitto

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux下进程如何实现共享内存通信

    这次我们来讲一下Linux进程通信中重要的通信方式:共享内存作为Linux软件开发攻城狮,进程
    发表于 04-26 17:14 732次阅读

    Linux下进程通信方式-管道

    Linux下进程通信方式-管道分享到: 本文关键字: linux 管道通信,linux 进程
    发表于 08-29 15:29

    Linux现有的所有进程IPC方式

    ;不合适频繁或信息量大的通信;3. 共享内存:无须复制,共享缓冲区直接付附加到进程虚拟地址空间,速度快;但进程的同步问题操作系统无法实现,必须各
    发表于 08-20 06:17

    常用的进程通信主要有哪几种方式

    这里说的嵌入式系统,是嵌入式linux系统,嵌入式linux系统其实和电脑端的linux系统一样,作为一个系统,就不可能就跑一个程序或者任务,大多都会有好几个进程,这样的话就会用到进程
    发表于 11-08 07:38

    进程通信方式有哪些?

    进程通信方式有哪些?
    发表于 12-24 06:46

    哪些方式可以实现Linux系统下的进程通信

    哪些方式可以实现Linux系统下的进程通信进程与线程有哪些不同之处呢?
    发表于 12-24 06:38

    进程通信之Linux下进程通信概述

    在上一章中,读者已经知道了进程是一个程序的一次执行。这里所说的进程一般是指运行在用户态的进程,而由于处于用户态的不同进程之间是彼此隔离的,就像处于不同城市的人们,它们必须通过某种
    发表于 10-18 16:21 0次下载

    进程与线程通信方式

    进程通信则不同,它的数据空间的独立性决定了它的通信相对比较复杂,需要通过操作系统。以前进程
    的头像 发表于 04-09 15:58 9017次阅读
    <b class='flag-5'>进程</b><b class='flag-5'>间</b>与线程<b class='flag-5'>间</b>的<b class='flag-5'>通信</b><b class='flag-5'>方式</b>

    Linux进程通信方式——管道

    管道是Linux中进程通信的一种方式,它把一个程序的输出直接连接到另一个程序的输入。Linux的管道主要包括两种:无名管道和有名管道。
    发表于 06-01 09:13 1520次阅读
    Linux<b class='flag-5'>进程</b><b class='flag-5'>间</b><b class='flag-5'>通信</b><b class='flag-5'>方式</b>——管道

    Linux进程的五种通信方式介绍 4

    进程通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名
    的头像 发表于 02-15 10:19 673次阅读

    Linux进程的五种通信方式介绍 5

    进程通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名
    的头像 发表于 02-15 10:20 665次阅读

    进程通信的机制有哪些

    进程通信(interprocess communication,简称IPC)指两个进程之间的通信。系统中的每一个
    的头像 发表于 07-21 11:23 1045次阅读
    <b class='flag-5'>进程</b><b class='flag-5'>间</b><b class='flag-5'>通信</b>的机制有哪些

    常见的进程通信方式

    进程通信 如果两个进程,想要知道对方在干嘛,或者进行协调运行,就需要进程
    的头像 发表于 10-08 15:48 1457次阅读
    常见的<b class='flag-5'>进程</b><b class='flag-5'>间</b><b class='flag-5'>通信</b><b class='flag-5'>方式</b>

    进程通信方式总结

    进程通信(IPC): 进程通信方式有很多,这里
    的头像 发表于 11-09 09:25 864次阅读
    <b class='flag-5'>进程</b><b class='flag-5'>间</b><b class='flag-5'>通信</b><b class='flag-5'>方式</b>总结

    进程通信的消息队列介绍

    消息队列是一种非常常见的进程通信方式
    的头像 发表于 04-08 17:27 377次阅读