Android MQTT 发布订阅多个主题

 公司是做Zwave智能家居的,以前和服务器连接是TCP长连接,最近想将服务器切换为MQTT服务器,做到主机与主机之间实现数据互通,这样就能以组网的方式,灵活的搭建使用场景,做到从家装到工装的转变,甚至跨平台的控制。从理论上是可行的,实际上又要开始填坑了。

先说下大概的使用场景,如一个家庭A(别墅型),面积大,有五台用来控制设备的主机(ABCDE),每台主机有属于其自己的设备,目前的是可以直接控制的,现在的需求是需要主机之间能相互控制对方的设备。思路其实很简单,就是主机之间要相互通信,各自知道各自有什么设备,控制的时候将想要控制的设备发送给对方,对方再执行。参与MQTT来说,就是每台主机即是订阅者,又是发布者。

MQTT的使用非常简单,网上有很多相关的例子,如(https://blog.csdn.net/qq_27600345/article/details/80741284)(PS:但基本都是入门级的使用,很多东西还是需要自己慢慢探索的,也许是我没找到相关块的资料)。这里就不再贴代码了,简单的说下遇到的问题,虽然现在回过头去很简单,但还是浪费了我一天的时间,里面有无数次抓狂。

首先是多个订阅的方法,这个比较容易,有心的话基本不用找资料都能发现:

SDK中已经提供了订阅多个主题的方法Client.subscribe(String[] topicFilters, int[] qos),只要把主题拼成数组就行了。

其次,就是发布多个主题,这也是困了我整整一天的问题,里论上获取多个topic,然后循环发送就可以了,然后测试的时候发现当第一个发布成功之后MQTT服务器直接断掉了,然后各种找资料,各种找原因,后面一步一步调试发现不是方法的问题。

其实这样循环布是可行的,服务器一直断线的原因是我接收到数据之后写了个回调,然后在回调里面直接处理数据了,数据量有点大,一两秒还是要的,然后阻塞了接收消息的线程,造成后续数据进不来,把服务器卡掉线了。把回调扔到线程池里就可以了。

从结果来看,messageArrived应该是单线程操作,所以不能进行耗时操作,回过头去看,确实非常简单,但就这么句代码,整整困惑了我一天,但这也怪自己不能静下心来调试,平时也没注意这个。希望对遇到同样问题的同学有个参考。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值