MQTT的知识点
问题一:单片机缓存有限,处理能力有限的情况下,消息不可能一次发出,这种情况下要怎样通过MQTT发布消息?
先组装publish协议的头,里面写好payload的长度,通过tcp发出去,然后一点一点发payload。如果拿不到payload总长度,这个事情就难办。因为你发了一个publish协议报,服务端读到head里面的payload的长度之后,就会一直读,读到需要的长度,才算这个publish结束。所以,你的需求是首先确认你发布的内容的长度,然后组publish数据包头,填写payload长度,tcp:send(head),之后一段一段发送payload,比如一次1k,还是按照正常的tcp发送数据,一直发送完毕,就算这个publish结束了。接下来的send,都属于tcp层的,这些不用你干预的。如果在tcp层,send失败,那一定是socket有问题了,连接断了,你就得重新连接mqtt服务器了,如果没有发完,那么服务端的会话也会结束,就是说服务端也没有接收到数据。重新连接,你就得重发,发送消息中途,只要断掉,就得重连,是否要重发数据,取决于你是否保存了以前的数据。还有如果消息重要,可以使用qos=1或者2,可以确保服务端收到消息,qos=1需要一个来回,qos=2需要四个来回,qos=0非常简单,只要send出去就不管了。
问题二:MQTT的开源资源多吗?
http://www.mqtt.org里面很多
问题三:MQTT为什么一般不提供持久化的功能
mqtt协议里面是按照设备一直在线设计的,数据都是保存在内存里的
问题四:MQTT是不是很耗内存?
MQTT是比较吃内存的,emqtt的实测数据是:38W,内存占14G,CPU 15%
问题五:session与client之间的关系是怎样的?
这样的,比如你一个板子,作为客户端,发起mqtt的连接请求connect到mqtt服务器,比如说就是emqtt服务吧,emqtt服务端收到这个板子的连接请求之后,在tcp层上会和板子建立一个tcp的连接,在emqtt内部,会产生一个进程,和这个板子做数据通讯,同时还会产生一个进程,叫session,这个sessoin是专门管理这个板子订阅的主题,其它板子如果发布了这个板子感兴趣的主题的时候,也会发到这个板子对应的这个session里面,如果这个session收到订阅的主题之后,发现对用的client还活着,就通过这个client把数据经过tcp发到这个板子上,如果发现client已经没有了,就是说板子和服务端断掉了,那么session就会把收到的订阅的主题,先保存在session里面,下次板子连接上了,而且cleansession=false,那么这个session就不会清除,在这次连接时,就会把以前收到的订阅消息,发给板子,大概就是这个意思。
问题六:emqtt怎么知道连上来的client是同一个呢?
连接的时候,需要设置一个clientid,这个id可以不设置,如果不设置,在emqtt服务端会自动产生一个唯一的id,如果你要用到session,必须有一个唯一个id,你可以用imei。如果你一定要收到离线消息的话,就必须使用确定的id了。
问题七:emqtt的session时间可以修改吗?
你可以改一下session的时间,现在是48小时,你可以改为一周,如果要永久,恐怕emqtt不太适合。
问题八:emqtt的访问权限什么的都是写在配置文件里的?
etc/acl.config
问题九:emqtt的分布式是怎么回事?
分布式简单说就是把你的几台服务器连在一起,里面任意一台或者多台,只要不是全坏了,emqtt都可以正常运行。emqtt的数据是在几个节点共享的,某个节点出问题,数据是不会丢的,但是节点上的session数据会丢失。
相关文章
- python爬虫知识点总结(十二)使用Redis和Flask维护动态代理池
- python爬虫知识点总结(九)Requests+正则表达式爬取猫眼电影
- freertos知识点笔记——队列、二值信号量、计数信号量
- 1113 Integer Set Partition (25 分)【难度: 一般 / 知识点: 思维 贪心】
- 1106 Lowest Price in Supply Chain (25 分)【难度: 一般 / 知识点: 树的遍历】
- 1047 Student List for Course (25 分)【难度: 简单 / 知识点: 模拟】
- 1002 A+B for Polynomials (25 分)【难度: 一般 / 知识点: 模拟】
- 程序员必会知识点之 Doherty Threshold (Doherty阈值)App和网站的加载数据的时间用户最大忍受时间是多长
- node的小知识点
- QWeb知识点小结一 odoo13
- 【pytest】常见知识点汇总
- Android开发有关权限(permission)知识点汇总