MQTT 協(xié)議(三):實戰(zhàn)篇

如果覺得我寫的還不錯,請關注我的新浪微博@小橘爺,最新文章即時推送~
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)タ蚣芾镅芯坷瞺

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容