关闭

MQTT协议(三):实战篇

721人阅读 评论(0) 收藏 举报
分类:

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:167412次
    • 积分:3287
    • 等级:
    • 排名:第10320名
    • 原创:119篇
    • 转载:104篇
    • 译文:18篇
    • 评论:5条
    最新评论