MQTT-Client简洁实用版(iOS)

作者: Macalk | 来源:发表于2017-07-11 15:03 被阅读150次

    由于项目是汽车租赁,需要监控地图上车辆的数量变化。一直数据请求也不能满足。于是便有了这次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);
    
    // 这个是代理回调方法,接收到的数据可以在这里进行处理。
    

    }

    相关文章

      网友评论

        本文标题:MQTT-Client简洁实用版(iOS)

        本文链接:https://www.haomeiwen.com/subject/rckmhxtx.html