最新评论区最新随笔(rss) RSS

re: MQTT协议笔记之发布流程

@nieyong
谢谢兄弟的回复,

其实我还是觉得两次就可以搞定了。同样以Server -> Client为例

1. Server发送PUBLISH消息到Client,Client接收之后需要确认收到嘛,就返回PUBREC吧;但此时Client仅仅是把数据发送出去了而已,至于Server端收不收到那就不得而知.
2. Server可能收到了PUBREC,也可能没有收到
a. Server收到了PUBREC, 这时候就表示Client收到消息了,表示成功递送消息了。
b. Server没有收到PUBREC,等待一定时间后,重发PUBLISH即可。

在1中,Client收到PUBLISH后就把数据保存在数据库中,如果收到重复PUBLISH重数据库就可以知道是重复数据。
在2中,超时就重传PUBLISH即可。
感觉这样两步完全满足QoS2了呀!!


其实我在设计一套私有IM协议,用于自己的App中,希望能加你QQ探讨一下MQTT的QoS2问题。
我的QQ:357545146

2017-01-10 13:03 作者: Haven    

re: MQTT协议笔记之发布流程

@Haven

兄弟,针对QoS2,为了便于说明,我们先假设一个方向,Server -> Client:

----PUBLISH--->
<----PUBREC----
----PUBREL---->
<----PUBCOMP---

1. Server发送PUBLISH消息到Client,Client接收之后需要确认收到嘛,就返回PUBREC吧;但此时Client仅仅是把数据发送出去了而已,至于Server端收不收到那就不得而知
2. Server接收ClientPUBREC消息之后,需要回一个PUBREL消息告诉Client自己收到啦,同样道理也仅仅只是发送出去,Client是不是能收到的这个响应,心里面也没谱呀
3. Client收到来自Server的PUBREL之后,就非常明白自己针对PUBLISH消息做出的PUBREC响应消息在Server端是已经收到啦,但是需要告诉Server,自己收到它的再三确认啦
4. Server端此时等待Client上报PUBCOMP消息,一旦接收到之后,表示针对某个消息双方都再三确认了,这事就没有问题啦

其核心所设定网络是不靠谱的,任何一次发送数据到对端,都有可能因收不到(比如发送之后,某一端断网啦,或中间路由设备因为容量满了抛弃啦)。

好比双发约定一件事:

Server - 我给你说说这件事....
Client - 我同意了你这样做。
Server - 你确定你同意了?
Client - 是的,我同意了。
Server - OK,那这事就这么定了,我知道该怎么做啦。

2017-01-05 15:20 作者: nieyong    

re: 《软件自动化测试开发》作者微信号:zouhui1003it

666

2016-12-31 09:32 作者: zouhui    

re: MQTT协议笔记之发布流程

博主牛人呀,有一个QoS2的问题请教,为什么QoS2需要4次包,2次不就可以了吗?还望回复。

2016-12-27 09:00 作者: Haven    

技 术 改 变 世 界

宣传语

网站分类

其他分类

Google站内搜索

 

24小时内最热随笔

统计信息

订阅

Blog客户端API

推荐客户端

博客排行榜[前100人]

友情链接