如果覺得我寫的還不錯,請關注我的新浪微博@小橘爺,最新文章即時推送~
MQTT 協(xié)議(一):理論篇
MQTT 協(xié)議(二):推送篇
在進行了兩篇博客的理論覆蓋后,我們來寫一個 MQTT 的 Demo,看看如何在 iOS 開發(fā)中使用這項技術。
尋找框架
在面向?qū)ο蟮拈_發(fā)中,框架是快速開發(fā)的利器。封裝良好的框架可以有效地幫助我們避免直接接觸協(xié)議底層的一些東西。
于是我打開了 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 協(xié)議中的一些屬性,例如:host(服務器),port(端口)等。
MQTTCFSocketTransport *transport = [[MQTTCFSocketTransport alloc] init]; // 初始化對象
transport.host = @"localhost"; // 設置MQTT服務器的地址
transport.port = 1883; // 設置MQTT服務器的端口(默認是1883,當然,你也可以和你的后臺好基友協(xié)商~)
self.mySession = [[MQTTSession alloc] init]; // 初始化MQTTSession對象
self.mySession.transport = transport; // 給mySession對象設置基本信息
self.mySession.delegate = self; // 設置mySession的代理為APPDelegate,同時不要忘記遵守協(xié)議~
[self.mySession connectAndWaitTimeout:30]; // 設定超時時長,如果超時則認為是連接失敗,如果設為0則是一直連接。
訂閱主題
正如我們在第一篇博文所說的,MQTT協(xié)議是一個發(fā)布/訂閱式的協(xié)議,所以在創(chuàng)建和連接完成后,我們就開始訂閱主題。
[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 {
// 這個是代理回調(diào)方法,接收到的數(shù)據(jù)可以在這里進行處理。
}
發(fā)布消息
[self.mySession publishAndWaitData:data
onTopic:@"topic"
retain:NO
qos:MQTTQosLevelAtLeastOnce];
其中,data 表示你要發(fā)送的數(shù)據(jù),topic 表示你向哪個主題發(fā)送數(shù)據(jù),retain 如果是 YES, 數(shù)據(jù)會被存儲在服務器,直到下一條 retain 也為YES的數(shù)據(jù)傳入就會復寫,qos 則是三種消息的等級,這些在第一篇博客中已經(jīng)講過了。
總結(jié)
大體上的用法就是這些,通過這幾步就可以基本實現(xiàn) MQTT 的基礎功能了,至于保持心跳和使用 MQTT 框架搭建一個輕量級的即時通訊系統(tǒng)的問題,就靠同學們?nèi)タ蚣芾镅芯坷瞺