MQTT协议(三):实战篇

转载地址:http://www.jianshu.com/p/b093fe6c3f10

MQTT协议(三):实战篇

字数828  阅读4672  评论57 

如果觉得我写的还不错,请关注我的新浪微博@杨浩宇-小橘爷,最新文章即时推送~
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框架搭建一个轻量级的即时通讯系统的问题,就靠同学们去框架里研究啦~



    • 0
      点赞
    • 1
      收藏
      觉得还不错? 一键收藏
    • 1
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论 1
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值