这里不纪录协议文档中大部分通用内容主要记录一下自己比较困惑的细节处理机制。主要有如下几个点:

连接时的具体细节行为?

client 在连接到broker时同时指定自己的keepaliveTime和 will主题(可选)和对应的具体的msg。之后broker会启动一个定时器,client会按keepaliveTime 的时间间隔给broker发送PINGREQ消息从而告诉broker自己是OK的,然后broker就会回应客户端并复位定时器。如果client超过1.5个keepaliveTime 时间未向broker发送PINGREG,则broker就认为client出问题了就会替client发布连接时预设的will主题消息(如果连接时设置了)以通知感兴趣这个信息的client,所以will主题也叫“遗嘱主题”。client连接到broker的时候可以指定是否清除会话 标志,如果未设置clean session 则broker需要恢复上一次记录的会话包括订阅的主题和will信息。

消息发布过程的retain标志的作用?

告诉服务器是否保存我的这次发布的topic msg 。等再有新的订阅时就直接通知新订阅的client这个topic msg的最近一次msg。

发布和订阅都可以指定QOS等级,那么broker应该如何处理这个问题呢?

以最初主题发布者的QOS等级为基准,比如最初发布者为0则其他订阅者的QOS等级会被降级,也就是说订阅者的QOS等级是在说订阅者接受的最高QOS。所以最后就是如下的组合:

行为发布者,列为订阅者,组合后的结果为订阅者最终的QOS。

QOS

0 1 2
0 0 0 0
1 0 1 1
2 0 1 2

所以最后的组合其实就是只有如下几种情况,至少mosquitto是这样实现的。

pub   pub(0)   pub(1)   pub(1)   pub(2)   pub(2)   pub(2)
sub   sub(0)   sub(0)   sub(1)   sub(0)   sub(1)   sub(2)

=    0     0    1     0     1      2

最新文章

  1. mongoTemplate简单用法(增删改查)
  2. CSS中的绝对定位与相对定位
  3. linux操作系统-脚本入门
  4. Linux服务器文件删除空间未释放的问题
  5. jQuery实现无限加载瀑布流特效
  6. 使用css3中calc()进行自适应布局
  7. libqrencode 3.4.3 发布,二维码的C解析库
  8. Java中List、Collections实现梭哈游戏
  9. Spring里用@RequestParam接受Date类型的url参数
  10. ListView onItemClick(AdapterView<?> parent, View view, int position, long id)参数详解
  11. js优化 ----js的有序加载
  12. makefile:4: *** missing separator. Stop.
  13. Delphi线程池
  14. 一种优雅的条件引用第三方.net库的方法
  15. i春秋----Misc
  16. WeTest----如何查看Wetest生成测试报告?
  17. C#流程控制语句--分支语句(if,switch,三位运算符)
  18. 配置合适的Visual Studio 2017 开发环境(其它版本的也适用)
  19. 【转】WPF PasswordBox不支持绑定解决方法
  20. Logical Volume Manager (LVM)

热门文章

  1. SpringCloud Alibaba Nacos注册中心源码浅析
  2. Py数据类型—列表,字典,元组
  3. Py数据类型—整形与字符串
  4. Databricks 第10篇:Job
  5. 转 8 jmeter之集合点
  6. C指针的这些使用技巧,掌握后立刻提升一个Level
  7. Server Tracking of Client Session State Changes Connection Management
  8. bcprov-jdk15on包用于创建CSR(证书请求)
  9. 多线程c++11编程题目
  10. LOJ10201