博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EMQ学习笔记---Clean Session和Retained Message
阅读量:6501 次
发布时间:2019-06-24

本文共 1552 字,大约阅读时间需要 5 分钟。

MQTT会话(Clean Session)

MQTT客户端向服务器发起CONNECT请求时,可以通过’Clean Session’标志设置会话。
‘Clean Session’设置为0,表示创建一个持久会话,在客户端断开连接时,会话仍然保持并保存离线消息,直到会话超时注销。
‘Clean Session’设置为1,表示创建一个新的临时会话,在客户端断开时,会话自动销毁。

当clean session的值为false,即保留会话,那么

该客户端上线,并订阅了主题"r",那么该主题会一直存在,即使客户端离线,该主题也仍然会记忆在EMQ服务器内存。
当客户端离线又上线时,仍然会接收到离线期间别人发来的publish消息(QoS=0,1,2)。类似即时通讯软件,终端可以接收离线消息。
除非客户端主动取消订阅主题,否则主题一直存在。另外,Mnesia本地不会持久化session,subscription和topic,服务器重启则丢失。

Mnesia是一个(DBMS),适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,是构建电信应用的控制系统平台开放式电信平台(OTP)的一部分。

当clean session的值为true,即不保留会话,那么

该客户端上线,并订阅了主题"r",那么该主题会随着客户端离线而删除。
当客户端离线又上线时,接收不到离线期间别人发来的publish消息。

 

不管clean session的值是什么,当终端设备离线时,QoS=0,1,2的消息一律接收不到。

当clean session的值为true,当终端设备离线再上线时,离线期间发来QoS=0,1,2的消息一律接收不到。
当clean session的值为false,当终端设备离线再上线时,离线期间发来QoS=0,1,2的消息仍然可以接收到。如果同个主题发了多条就接收多条,一条不差,照单全收。

emqttd服务器程序,客户端每发起一个tcp连接就会新建一个client connection和一次会话,后台会新建一个相应的connection进程和一个session进程。同一topic下,当设备A离线时,设备B在publish消息时,仍然可以匹配topic,进而找到这个session A进程,把消息发给设备A,缓存在消息队列里。设备A上线就可以收到离线消息。

 

QTT保留消息(Retained Message)

MQTT客户端向服务器发布(PUBLISH)消息时,可以设置保留消息(Retained Message)标志。保留消息(Retained Message)会驻留在消息服务器,后来的订阅者订阅主题时仍可以接收该消息。

关于retain的说明

Mnesia:retained_message
终端设备publish消息时,如果retain值是true,则服务器会一直记忆,哪怕是服务器重启。因为Mnesia会本地持久化。
如果服务器接收到终端publish某主题的消息,payload为空且retain值是true,则会删除这条持久化的消息。

如果服务器接收到终端publish某主题的消息,payload为空且retain值是false,则不会删除这条持久化的消息。

emqttd v1.1.3-module(emqttd_retainer).%% RETAIN flag set to 1 and payload containing zero bytesretain(#mqtt_message{retain = true, topic = Topic, payload = <<>>}) ->    emqttd_backend:delete_message(Topic);

  

 

转载地址:http://sgvyo.baihongyu.com/

你可能感兴趣的文章
RPC-client异步收发核心细节?
查看>>
POJ-1753 Flip Game 枚举 状态压缩
查看>>
〖Linux〗使用Qt5.2.0开发Android的NDK应用程序
查看>>
idea快捷键
查看>>
Finalize/Dispose/Destructor
查看>>
33.搜索插件——autocomplete
查看>>
使用XML在MSSQL把字串分解
查看>>
顺序结构,判断结构 if,switch
查看>>
github如何搜索资料
查看>>
springMVC swagger2
查看>>
cocos2dx-3.9 集成admob
查看>>
视音频数据处理入门:RGB、YUV像素数据处理【转】
查看>>
写文章 TEE技术分析【转】
查看>>
恢复误删的进程在使用的文件【转】
查看>>
android休眠唤醒驱动流程分析【转】
查看>>
Tslib移植与分析【转】
查看>>
WIN7 任务栏放右侧 有个BUG
查看>>
结对项目进展
查看>>
创建服务
查看>>
Dispatcher与UI线程交互
查看>>