其他分享
首页 > 其他分享> > MQTT

MQTT

作者:互联网

mqtt

1. MQTT简介

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。

2. MQTT应用

IBM和St. Jude医疗中心通过MQTT开发了一套Merlin系统,该系统使用了用于家庭保健的传感器。St. Jude医疗中心设计了一个叫做Merlin@home的心脏装置,这种无线发射器可以用来监控那些已经植入复律-除颤器和起搏器(两者都是基本的传感器)的心脏病人。
该产品利用MQTT把病人的即时更新信息传给医生/医院,然后医院进行保存。这样的话,病人就不用亲自去医院检查心脏仪器了,医生可以随时查看病人的数据,给出建议,病人在家里就可以自行检查。
通过MQTT协议,目前已经扩展出了数十个MQTT服务器端程序,可以通过PHP,JAVA,Python,C,C#等系统语言来向MQTT发送相关消息。
此外,国内很多企业都广泛使用MQTT作为Android手机客户端与服务器端推送消息的协议。随着移动互联网的发展,MQTT由于开放源代码,耗电量小等特点,将会在移动消息推送领域会有更多的贡献,在物联网领域,传感器与服务器的通信,信息的收集,MQTT都可以作为考虑的方案之一。在未来MQTT会进入到我们生活的各各方面。
如果需要下载MQTT服务器端,可以直接去MQTT官方网站点击software进行下载MQTT协议衍生出来的各个不同版本。

3. MQTT特点编辑

MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:

  1. 使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;
  2. 对负载内容屏蔽的消息传输;
  3. 使用 TCP/IP 提供网络连接;
  4. 有三种消息发布服务质量:
    至多一次 消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送.
    至少一次 确保消息到达,但消息重复可能会发生。
    只有一次 确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
  5. 小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;
  6. 使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制

4、步骤

1.创建一个客户端对象;
  2.设置连接MQTT服务器的选项;
  3.如果多线程(异步模式)操作被使用则设置回调函数(详见 Asynchronous >vs synchronous client applications);
  4.订阅客户端需要接收的任意话题;
  5.重复以下操作直到结束:
    a.发布客户端需要的任意信息;
    b.处理所有接收到的信息;
  6.断开客户端连接;
  7.释放客户端使用的所有内存。

订阅客户端详解

以下函数完成的是订阅的功能。

void *subClient(void *threadid)

过程大概:

第一步:声明客户端,并通过函数给其赋值;

MQTTClient client;
MQTTClient_create(&client, ADDRESS, SUB_CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL);

第二步:设置连接MQTT服务器的选项;

MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;

第三步:设置回调函数;

MQTTClient_setCallbacks(client, NULL, connlost, msgarrvd, delivered);
//相应的回调函数connlost,msgarrvd,delivered我的代码中都有

第四步:使用客户端和连接选项连接服务器;

MQTTClient_connect(client, &conn_opts))

第五步订阅话题;

MQTTClient_subscribe(client, TOPIC, QOS);

第六步一直等待,知道输入’Q’ 或’q’;

    do 
    {
        ch = getchar();
    } while(ch!='Q' && ch != 'q');

第六步一直等待,直到输入’Q’ 或’q’;

    do 
    {
        ch = getchar();
    } while(ch!='Q' && ch != 'q');

第七步取消订阅;

MQTTClient_unsubscribe(client, TOPIC);

第八步.断开客户端连接;

 MQTTClient_disconnect(client, 10000);

第九步.释放客户端使用的所有内存;

MQTTClient_destroy(&client);

标签:MQTTClient,ch,MQTT,client,消息,客户端
来源: https://blog.csdn.net/qq_47480031/article/details/110804644