MQTT协议(三):实战篇

转载 2016年08月30日 10:29:17

MQTT协议(三):实战篇


如果觉得我写的还不错,请关注我的新浪微博@杨浩宇-小橘爷,最新文章即时推送~
MQTT协议(一):理论篇
MQTT协议(二):推送篇
在进行了两篇博客的理论覆盖后,我们来写一个MQTT的Demo,看看如何在iOS开发中使用这项技术。

寻找框架

在面向对象的开发中,框架是快速开发的利器。封装良好的框架可以有效地帮助我们避免直接接触协议底层的一些东西。

于是我打开个Github,搜索MQTT,找到了Stars最多的一个用Objective-C封装的MQTT框架:MQTT-Client-Framework。接下来让我们一起来学习如何使用这个框架~

导入框架

如果你比较喜欢用Cocoapods(在工作中大家应该都会使用这个的,对吧?),可以把以下的语句写入Podfile:

pod 'MQTTClient'

然后Pod Update,完成之后我们就可以开心的使用这个框架啦~

使用框架

第一步,自然是导入MQTT-Client-Framework框架的主头文件:

#import <MQTTClient/MQTTClient.h>

第二步,在APPDelegate的类扩展里声明一个MQTTSession类的属性:

@property (nonatomic, strong) MQTTSession *mySession;

第三步,在APPDelegate中初始化mySession :

首先,初始化一个MQTTCFSocketTransport对象,这个对象是用来记录MQTT协议中的一些属性,例如:host(服务器),port(端口)等。

MQTTCFSocketTransport *transport = [[MQTTCFSocketTransport alloc] init];//初始化对象

transport.host = @"localhost";//设置MQTT服务器的地址

transport.port = 1883;//设置MQTT服务器的端口(默认是1883,当然,你也可以和你的后台好基友协商~)

self.mySession = [[MQTTSession alloc] init];//初始化MQTTSession对象

self.mySession.transport = transport;//给mySession对象设置基本信息

self.mySession.delegate = self;//设置mySession的代理为APPDelegate,同时不要忘记遵守协议~

[self.mySession connectAndWaitTimeout:30];//设定超时时长,如果超时则认为是连接失败,如果设为0则是一直连接。

订阅主题

正如我们在第一篇博文所说的,MQTT协议是一个发布/订阅式的协议,所以在创建和连接完成后,我们就开始订阅主题。

[self.mySession subscribeToTopic:@"example/#" atLevel:2 subscribeHandler:^(NSError *error, NSArray*gQoss) {//Topic则表示要订阅的主题,Level(qosLevel)表示消息等级。
    if (error) {
        NSLog(@"Subscription failed %@", error.localizedDescription);
    } else {
        NSLog(@"Subscription sucessfull! Granted Qos: %@", gQoss);
    }
}];

收到消息

- (void)newMessage:(MQTTSession *)session data:(NSData*)data onTopic:(NSString*)topic qos:(MQTTQosLevel)qos retained:(BOOL)retained mid:(unsignedint)mid {
    // 这个是代理回调方法,接收到的数据可以在这里进行处理。
}

发布消息

[self.mySession publishAndWaitData:data

                            onTopic:@"topic"

                             retain:NO

                                qos:MQTTQosLevelAtLeastOnce];

其中,data表示你要发送的数据,topic表示你向哪个主题发送数据,retain如果是 YES, 数据会被存储在服务器,直到下一条retain也为YES的数据传入就会复写,qos则是三种消息的等级,这些在第一篇博客中已经讲过了。

总结

大体上的用法就是这些,通过这几步就可以基本实现MQTT的基础功能了,至于保持心跳和使用MQTT框架搭建一个轻量级的即时通讯系统的问题,就靠同学们去框架里研究啦~


From http://www.jianshu.com/p/b093fe6c3f10

MQTT协议应用实例

引子:很久以前就知道MQTT协议了,也知道该协议主要应用到物联网上,具备很多特点,但是一直是处于不知其意状态。今天有幸看到了一篇博文,然后自己将该博文里面的内容操作了一遍,同时将手上的CC3200开发...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

MQTT协议(三):实战篇

转载地址:http://www.jianshu.com/p/b093fe6c3f10 MQTT协议(三):实战篇 字数828 阅读4672 评论57 喜欢32 如果觉...

MQTT协议实现(一)

MQTT协议实现(一) 11年的时候,记录写过一篇文章《采用MQTT协议实现android消息推送》,那个时候,只是为了实现推送的功能,没有仔细阅读过MQTT协议的内容。最近看同事又重新提起这个协...

MQTT和spring的整合(消费端)

一,maven依赖 org.springframework.integration spring-integration-mqtt 4.1.0.RELEASE ...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

互联网推送服务原理:长连接+心跳机制(MQTT协议)

互联网推送消息的方式很常见,特别是移动互联网上,手机每天都能收到好多推送消息,经过研究发现,这些推送服务的原理都是维护一个长连接(要不不可能达到实时效果),但普通的socket连接对服务器的消耗太大了...
  • clh604
  • clh604
  • 2014年03月01日 00:06
  • 53046

MQTT---HiveMQ源码详解(一)概览

MQTT---HiveMQ源码详解(一)概览

Mina框架学习笔记(一)

Apache MINA is a network application framework which helps users develop high performance and high s...
  • yztezhl
  • yztezhl
  • 2015年04月30日 09:19
  • 699

mqtt 异步消息 长连接 解析

mqtt 是轻量级基于代理的发布/订阅的消息传输协议,设计思想是开放,简单,轻量级,且易于实现,这些优点使得他受用于任何环境 该协议的特点有:  使用发布/订阅消息的模式,提供一对多的消息发布,解除应...
  • axuanqq
  • axuanqq
  • 2016年07月13日 14:09
  • 7716
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MQTT协议(三):实战篇
举报原因:
原因补充:

(最多只允许输入30个字)