iOS中简单的 MQTT和 WS组合使用
发布时间:2023-04-01 13:50:45 所属栏目:教程 来源:
导读: 历经三天的寻找和尝试,终于完成了一个任务,任务要求的服务器访问用WebSocket的URL格式的,而访问结束后要进行订阅和消息发送,这更多出现在MQTT协议的框架里,例如这个文章
-(void)loginMQTT{
/*设置i
-(void)loginMQTT{
/*设置i
|
历经三天的寻找和尝试,终于完成了一个任务,任务要求的服务器访问用WebSocket的URL格式的,而访问结束后要进行订阅和消息发送,这更多出现在MQTT协议的框架里,例如这个文章 -(void)loginMQTT{ /*设置ip和端口号*/ self.transport.host=_ip; self.transport.port=_port; /*设置MQTT账号和密码*/ self.mqttSession.transport=self.transport;//给MQTTSession对象设置基本信息 self.mqttSession.delegate=self;//设置代理 [self.mqttSession setUserName:_userName]; [self.mqttSession setPassword:_password]; //会话链接并设置超时时间 [self.mqttSession connectAndWaitTimeout:5]; } 该方式的host格式严格是“xxx.xxx.xx.xx”,如果格式错误,会直接访问报错,域名解析错误。报错信息如下: 2021-05-27 09:49:58.630527+0800 Intelligent_fire_protection[28024:9675835] Error Domain=kcfErrorDomainCFNetwork Code=2 "(null)" UserInfo={_kcfStreamErrorDomainKey=12, _kcfStreamErrorCodeKey=8, kCfgetAddrInfoFailureKey=8} 有时也会返回404,报错信息如下 Error Domain=SRWebSocketErrorDomain Code=2132 "received bad response code from server 404" UserInfo={NSLocalizedDescription=received bad response code from server 404, HTTPResponseStatusCode=404} 如果格式包含了path,例如“ws://xxxx/xxxx.xx.xx/mqtt”,需要将 self.transport.host=_ip;和self.transport.port=_port;删去,改成self.transport.url=“ws://xxxx/xxxx.xx.xx/mqtt”。 实现效果我没具体实践,应该不会有问题,起初我没发现这个url属性,host地址又被框架定死没办法和后台统一,访问又一直失败,于是我换了一个网上的demo,在另一个demo里发现了url属性,并完成了我的需求,后来回头查看这个框架的时候,发现也有url属性。爬坑了。 接下来我简单介绍一下我应用的这个框架: 配置MQTT。 MQTTClient 配置更多 是可持续更新,可配置 SSL pod 'MQTTClient' pod 'MQTTClient/MinL' pod 'MQTTClient/ManagerL' pod 'MQTTClient/WebsocketL' .h文件中添加文件头和MQTTsession变量 #import <MQTTClient.h> #import <MQTTWebsocketTransport.h> #define WEAKSELF __typeof(&*self) __weak weakSelf = self; @property (nonatomic, strong) MQTTSession *mySession; .m文件中添加协议<MQTTSessionDelegate,MQTTSessionManagerDelegate>,定义相应的变量,本文后续代码都在改.m文件中添加 @property(nonatomic,strong)Nsstring *server_ip; @property(nonatomic,strong)Nsstring *userName; @property(nonatomic,strong)Nsstring *passWord; @property(nonatomic,strong)NSArray *topics; 文章中用到了下面的代码,但我在应用时候链接服务器报错了,我便把这部分代码注释掉了,实际上这部分代码只是避免持续等待连接卡死的情况,当连接时间超过某一个时间长度就强制断开申请连接。后文中我另加了一行代码实现这个功能。 MQTTCFSocketTransport *transport = [[MQTTCFSocketTransport alloc] init]; transport.host = @"localhost"; transport.port = 1883; MQTTSession *session = [[MQTTSession alloc] init]; session.transport = transport; session.delegate = self; [session connectAndWaitTimeout:30]; (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
