Android MQTT 发布订阅多个主题 - Go语言中文社区

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

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/VaFang/article/details/82782732
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-05-11 22:59:44
  • 阅读 ( 2521 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢