MQTT协议(三):实战篇
来源:互联网 发布:淘宝无名体育发货慢 编辑:程序博客网 时间:2024/06/06 07:50
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协议(三):实战篇
- MQTT 协议(三):实战篇
- MQTT协议(三) PUBLISH
- MQTT实战篇
- MQTT实战篇
- MQTT实战篇
- MQTT协议-MQTT协议解析(MQTT数据包结构)
- 针对物联网中MQTT协议的学习(三)
- MQTT协议(一):理论篇
- MQTT协议(二):推送篇
- MQTT协议(一):理论篇
- MQTT协议(二):推送篇
- MQTT协议(一):理论篇
- MQTT 协议(二):推送篇
- MQTT协议(一)
- MQTT协议(2)-MQTT 初次体验
- MQTT协议实现(一)
- 妹子UI之自定义分页控件
- cocos2d-js 重新require JS文件
- Android自定义控件:动画类(五)----属性动画ValueAnimator基本使用
- Java回调机制和Java反射机制理解
- 【Github】fatal: remote error: You can't push to git 解决办法
- MQTT协议(三):实战篇
- 微信登陆的坑
- Android中NoClassDefFoundError异常解决记录
- --配置虚拟主机的流程
- 年终总结
- VSync Count 垂直同步
- android 实时PCM数据编码成AAC【转】
- cocos2d-js 把JS错误打印到屏幕上
- 104. Maximum Depth of Binary Tree