ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:18.74KB ,
资源ID:21446698      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/21446698.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(mqttcclient实现消息推送入门指南Word格式文档下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

mqttcclient实现消息推送入门指南Word格式文档下载.docx

1、服务端推送消息,也是基于主题的。当服务器发现有主题(如,topic=“天气”)时,就会给所有订阅该主题的客户端推送payload内容。 这里需要个前提,就是有客户端订阅topic=”天气”这个主题;一旦客户端订阅该主题,服务端就会每收到该主题的消息,都会推送给订阅该主题的客户端。如果客户端不需要关注该主题了,也就是说不想接受到这样的推送消息了,只要取消otpic=”天气”的主题订阅即可。MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;对负载内容屏蔽的消

2、息传输;使用 TCP/IP 提供网络连接;有三种消息发布服务质量:“至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。“至少一次”,确保消息到达,但消息重复可能会发生。“只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。(在实际编程中,只需要设置QoS值即可实现以上几种不同消息发布服务质量模式)小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;使用 Last Will 和 Testament 特性

3、通知有关各方客户端异常中断的机制;生成dll库?混合编程?在开始开发之前需要做一些准备工作,MQTT已经把所有的APIs封装好了,我们可以使用它的dll库,也可以直接导入源码进行混合编程,一般要求不高的话(因为不太懂得话,最好不要修改源码)可以直接将源码生成dll,然后使用即可,下文就是使用该方式:git clone 从这里获得C Client源码之后,可以直接使用VS打开(我是VS2013):对于上图的说明,下载源码后,打开将是以上界面,包括十来个工程,这里讲解几个:paho-mqtt3a : 一般实际开发中就是使用这个,a表示的是异步消息推送(asynchronous)。paho-mqtt

4、3as : as表示的是 异步+加密(asynchronous+OpenSSL)。paho-mqtt3c : c 表示的应该是同步(Synchronize),一般性能较差,是发送+等待模式。paho-mqtt3cs : 同上,增加了一个OpenSSL而已。这里根据自身的需要选择不同的项目生成DLL即可,右击单个项目-生成。由于你电脑中可能没有OPenSSL环境,如果点击VS工具栏中的生成解决方案,十有八九会失败,因为它会生成所有项目的解决方案,其实你根本用不着这么多。另外,上图中无法打开包括文件VersionInfo.h,你只需要在src文件夹中找到VersionInfo.h.in文件,去掉.

5、in后缀-重新生成即可。了解更多可以阅读MQTT C Client for Posix and Windows一文,下面根据官网资料,摘录了几个C语言实现MQTT的小DEMO。MQTT使用起来也十分容易,基本上就那四五个函数:MQTTClient_create(创建客户端)、MQTTClient_connect(连接服务端)、MQTTClient_publishMessage(客户端-服务端发送消息)、MQTTClient_subscribe(客户端订阅某个主题)等等。其中,很多异步回调函数,需要自己去实现,如,MQTTAsync_setCallbacks(mqtt-_client, mqtt

6、-_client, connlost, msgarrvd, NULL);1MQTTAsync_setCallbacks中,connlost函数指针,是当MQTT意外断开链接时会回调的函数,由自己实现;msgarrvd函数指针,是当服务器有消息推送回来时,客户端在此处接受服务端消息内容。另外,就是一些函数执行是否成功的回调函数,C语言封装回调之后,就是这么写法,看起来有些变扭。有兴趣的可以看浅谈C/C+回调函数(Callback)& 函数指针文章,再了解以下回调函数。mqtt-_conn_opts.onSuccess = onConnect;_conn_opts.onFailure = onCo

7、nnectFailure;12最后,不得不说的就是,MQTT有些发送或者是订阅的内容时(某些函数中),在编程最好将参数中传进来的值在内存中拷贝一份再操作,笔者当时开发时,就是因为这样的问题,折腾了较长时间,后来在wireshark中发现数据包中根本没有内容,才知道是由于函数参数是指针形式,直接在异步中使用可能会发生一些未知的错误。#include stdio.hstdlib.hstring.hMQTTClient.h#define ADDRESS tcp:/localhost:1883#define CLIENTID ExampleClientPub#define TOPIC MQTT Exa

8、mples#define PAYLOAD Hello World!#define QOS 1#define TIMEOUT 10000Lint main(int argc, char* argv) MQTTClient client; MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer; MQTTClient_message pubmsg = MQTTClient_message_initializer; MQTTClient_deliveryToken token; int rc; MQTTC

9、lient_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL); conn_opts.keepAliveInterval = 20; conn_opts.cleansession = 1; if (rc = MQTTClient_connect(client, &conn_opts) != MQTTCLIENT_SUCCESS) printf(Failed to connect, return code %dn, rc); exit(EXIT_FAILURE); pubmsg.payload = PAYLO

10、AD; pubmsg.payloadlen = strlen(PAYLOAD); pubmsg.qos = QOS; pubmsg.retained = 0; MQTTClient_publishMessage(client, TOPIC, &pubmsg, &token);Waiting for up to %d seconds for publication of %sn on topic %s for client with ClientID: %sn, (int)(TIMEOUT/1000), PAYLOAD, TOPIC, CLIENTID); rc = MQTTClient_wai

11、tForCompletion(client, token, TIMEOUT);Message with delivery token %d deliveredn, token); MQTTClient_disconnect(client, 10000); MQTTClient_destroy(&client); return rc;12345678910111213141516171819202122232425262728293031323334353637383940volatile MQTTClient_deliveryToken deliveredtoken;void delivere

12、d(void *context, MQTTClient_deliveryToken dt)Message with token value %d delivery confirmedn, dt); deliveredtoken = dt;int msgarrvd(void *context, char *topicName, int topicLen, MQTTClient_message *message) int i; char* payloadptr;Message arrivedn); topic:, topicName); message: payloadptr = message-

13、payload; for(i=0; ipayloadlen; i+) putchar(*payloadptr+); putchar(n MQTTClient_freeMessage(&message); MQTTClient_free(topicName); return 1;void connlost(void *context, char *cause)nConnection lostn cause:, cause); MQTTClient_setCallbacks(client, NULL, connlost, msgarrvd, delivered); deliveredtoken =

14、 0;Waiting for publication of %sn PAYLOAD, TOPIC, CLIENTID); while(deliveredtoken != token);123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869Asynchronous subscription exampleExampleClientSub int ch;Subscribing to topic %snfor client %s using QoS%dnnPress Q to quitnn, TOPIC, CLIENTID, QOS); MQTTClient_subscribe(client, TOPIC, QOS); do ch = getchar(); while(ch!=Q & ch != q1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1