iOS 功能类程序员首页投稿(暂停使用,暂停投稿)

MQTT-Client简洁实用版(iOS)

2017-07-11  本文已影响150人  Macalk

由于项目是汽车租赁,需要监控地图上车辆的数量变化。一直数据请求也不能满足。于是便有了这次MQTT使用介绍,实时获取后台推送的更新数据。很简单

1、集成


pod 'MQTTClient'
pod 'MQTTClient/Websocket'
pod 'SocketRocket'

2、简洁代码(测试时因为给服务器地址加了tcp://前缀,造成了NSStreamEventErrorOccurred错误,去掉前缀成功)

MQTTCFSocketTransport *transport = [[MQTTCFSocketTransport alloc] init]; // 初始化对象

transport.host = @"192.168.1.42"; // 设置MQTT服务器的地址

transport.port = 1883; // 设置MQTT服务器的端口(默认是1883,问后台)

self.mySession = [[MQTTSession alloc] init]; // 初始化MQTTSession对象

self.mySession.transport = transport; // 给mySession对象设置基本信息

self.mySession.delegate = self; // 设置代理,

[self.mySession setUserName:@"testuser"];//账号(问后台)

[self.mySession setPassword:@"testpassword"];//密码 (问后台)

// 注意:订阅主题不能放到子线程进行,否则block不会回调

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

// 会话链接并设置超时时间

[self.mySession connectAndWaitTimeout:0]; // 设定超时时长,如果超时则认为是连接失败,如果设为0则是一直连接。

dispatch_async(dispatch_get_main_queue(), ^{

// 订阅主题, qosLevel是一个枚举值,指的是消息的发布质量(我们后台随便创建了一个名叫abc的主题)

[self.mySession subscribeToTopic:@"abc" atLevel:MQTTQosLevelAtMostOnce subscribeHandler:^(NSError *error, NSArray*gQoss) {

if (error) {

NSLog(@"连接失败 = %@", error.localizedDescription);

}else{

NSLog(@"链接成功 = %@", gQoss);

}

}];

});

});

3、实现代理方法(数据接收的回调)

- (void)newMessage:(MQTTSession *)session data:(NSData*)data onTopic:(NSString*)topic qos:(MQTTQosLevel)qos retained:(BOOL)retained mid:(unsigned int)mid {

NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

NSLog(@"%@",dic);

// 这个是代理回调方法,接收到的数据可以在这里进行处理。

}

上一篇下一篇

猜你喜欢

热点阅读