默认

[已解决] 求教MobileIMSDK客户端消息传递时QoS应答机制的疑问

查看数: 40583 | 评论数: 9 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-06-02 17:25

正文摘要:

问题描述          服务端 在云端(华为云)          多个客户端分布在不同的服务器(不同ip)中,同时连接服务端       &nb ...

评论

JackJiang 发表于 3 年前
引用:hlf520 发表于 2021-06-05 11:42
线上,线下分别做了测试
结论:Qos机制没有问题,是我拿到消息后处理的问题(在操作数据库执行方法是不 ...

好的,明白了。后面再遇到别的技术问题,直接开贴即可
hlf520 发表于 3 年前
引用:JackJiang 发表于 2021-06-02 21:36
理论上,只要你发送时,指明QoS参数为true(即表示需要QoS机制),则每条消息都会由SDK底层自动实现消息的 ...

线上,线下分别做了测试
结论:Qos机制没有问题,是我拿到消息后处理的问题(在操作数据库执行方法是不是同一事务造成)
hlf520 发表于 3 年前
引用:JackJiang 发表于 2021-06-03 10:36
你这日志是用什么工具抓取的,很实用啊

日志是通过MessageQoSEventImpl记录到关系表中的
hlf520 发表于 3 年前
引用:JackJiang 发表于 2021-06-03 10:36
你这日志是用什么工具抓取的,很实用啊
1:日志是通过消息送达相关事件(由QoS机制通知上来的)在此MessageQoSEvent子类中实现即可记录到关系表中的
2:问题少描述了一个在项目实施过程中的细节服务端与客户端在同一网段内,没有出现过上述问题
JackJiang 发表于 3 年前
引用:hlf520 发表于 2021-06-03 10:24
这是我发送消息Qos true

p = ProtocalFactory.createCommonData(message.toString(), from_user_id, t ...

你这日志是用什么工具抓取的,很实用啊
JackJiang 发表于 3 年前
引用:hlf520 发表于 2021-06-03 10:29
根据您的建议我会调试下

嗯,有情况及时在帖子里讨论
hlf520 发表于 3 年前
引用:JackJiang 发表于 2021-06-02 21:36
理论上,只要你发送时,指明QoS参数为true(即表示需要QoS机制),则每条消息都会由SDK底层自动实现消息的 ...

根据您的建议我会调试下
JackJiang 发表于 3 年前
理论上,只要你发送时,指明QoS参数为true(即表示需要QoS机制),则每条消息都会由SDK底层自动实现消息的应答。你说的有收能收到应答,有时收不到,理论上不可能。

你可以在gitee上把源码下载下来,在源码的基础上边调试,边观察,这样更具体一点。

MobileIMSDK的QoS的原理就是:

  • 1)你发出一条消息后,此消息会自动进入到 QoS发送保证队列,代码实现是 QoS4SendDaemon.java
  • 2)对方收到消息后,会由发送应答包;
  • 3)发者者收到应答包后,会在QoS接收机制中移除这条消息(在第1)步中加入的),代码实现是 QoS4ReciveDaemon.java
  • 4)当第3)步没有发生,也就是发送者没有收到接收者发过来的应答包时,第1)步中的QoS列队,会自动计算机这条消息在超时时间内没有收到应答包,并决定进行重传(进入重传逻辑)。

以上就是QoS机制的大致原理,你可以按我说的,去读一下或调试一下代码。代码是很精确的,该是怎么样就是怎么样,有时能有时又不能,那一定是有别的原因,你可以深究一下。

你在研究的过程中,如果遇到任何技术疑问,你就在就在这个帖子里回复,有必要的话就新开一贴,我看到后会及时详细帮你分析。

返回顶部