[iOS 项目中用的MQTT以及注意点记录]

来源:互联网 发布:思科网络会议系统 编辑:程序博客网 时间:2024/05/29 03:43

目前项目中用的是这个MQTT处理,,没有采用GithHub上的MQTTClient
但是用下来发现,项目中目前使用的这个方案也是可以满足需要的

目前使用的是这个
iOS,MQTTClient使用
http://www.cnblogs.com/douniwanxia/p/6580175.html

下面记录一下问题

MQTT的断开;

问题一

无论是什么情况的断开,
MQTTSession的代理方法

-(void)handleEvent:(MQTTSession *)session event:(MQTTSessionEvent)eventCode error:(NSError *)error;

都会返回closed这样的错误码
这时候只需要执行重新连接即可
- (void)connect{
[_mqttSession connect];
}

但是稍微注意的是,最好手工控制一下重连的延迟时间,不然在处于断网的情况下,mqtt会不断重连,不断回调错误码,然后又崩溃风险,加一下延迟执行重连,目前没有发现崩溃可能.

问题二

iOS系统,在mqtt进入后台以后,MQTT好像就不工作了,回调什么的也没有,只能重新打开app以后,才会执行回调,才能重新连接,不知道大家有没有好点的办法解决,先记录一下, 等找到办法了再补充

问题三(诡异的线程卡顿)

1.切换为4G网络后,登录App同时登陆MQTT,在订阅消息的时候线程卡主!!!!!
明确一个事实:

在订阅消息时,必须在主线程,否则不会回调获取消息

网络情况不好时,就容易在订阅消息这一步卡主主线程,导致UI线程卡顿.

    dispatch_async(dispatch_get_main_queue(), ^{            // [self.mqttSession subscribeTopic:_topic];           [self.mqttSession subscribeToTopic:_topic atLevel:MQTTQosLevelAtLeastOnce];        });

解决办法就是超时时间设置小一点就好!!!!!!!!

[self.mqttSession connectAndWaitTimeout:1];
原创粉丝点击