请选择 进入手机版 | 继续访问电脑版

默认
发表评论 10
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已回复] 求教MobileIMSDK服务端onTransferMessage4C2S如何处理异常?消息已ack?
比如监听onTransferMessage4C2S
C2S的情况下,如果处理异常。但是因为已经被封装。消息是不是都ack回去了?当时为什么会是这么设计的?‘’图1就是我提问的点。图2是我认为应该这么改。因为我一直问你图1为什么要这么设计。。你还是没搞清楚我在问什么
QQ图片20220705103016.png


QQ图片20220705103156.png


搜索
复制




即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

上一篇:基于MobileIMSDK的IM每天几千离线消息,群聊会话列表、离线拉取问题下一篇:[已回复] 请教如何搭建自己的MobileIMSDK环境
推荐方案
评论 10
这个回调方法的作用,就是接受任何由客户端发送的、且接收者uid=“0”(也就是服务端) 的指令或消息。

我不太理解你的意思,你要么这么说:你想实现什么功能?

然后我给你合适的建议
签名: 《vivo手机上的系统级消息推送平台的架构设计实践》http://www.52im.net/thread-4008-1-1.html
引用:JackJiang 发表于 2022-06-25 17:26
这个回调方法的作用,就是接受任何由客户端发送的、且接收者uid=“0”(也就是服务端) 的指令或消息。

我 ...

C2S就是客户端发送的。服务端处理的。比如假设添加好友。或者说简单点。往客服发个消息1.客服收到消息后判断12345返回自动回复的12345的内容。这时候如果这个处理异常(因为某种随机性的原因,只要重试就可以正常通过的异常)。消息已经ack回去了。用户发了1后。看到客服不会自动回复。对吧?也不会重发再尝试一下
引用:li709854423 发表于 2022-06-30 19:51
C2S就是客户端发送的。服务端处理的。比如假设添加好友。或者说简单点。往客服发个消息1.客服收到消息后 ...

你应用层只管考虑发,至于怎么保证发到,这是sdk底层的算法的事
签名: 《vivo手机上的系统级消息推送平台的架构设计实践》http://www.52im.net/thread-4008-1-1.html
引用:JackJiang 发表于 2022-06-30 20:01
你应用层只管考虑发,至于怎么保证发到,这是sdk底层的算法的事

所以我说的这种场景还是没解决啊。。
onTransferMessage4C2S在处理异常的情况下。客户端会依然认为消息已经发送成功了,因为服务端已经应答回去了。
我主要是问为什么是这样设计的,onTransferMessage4C2S在异常的情况下,无法让服务端不发送应答消息,这样的设计是为什么。。
引用:li709854423 发表于 2022-07-01 11:03
所以我说的这种场景还是没解决啊。。
onTransferMessage4C2S在处理异常的情况下。客户端会依然认为消息 ...

说了这么多,我可能根本没理解你的意思是什么。

你要么直接说你想做什么功能,实现什么样的需求,不要讨论技术,让我理解你的意图后,我告诉你怎么做合理
签名: 《vivo手机上的系统级消息推送平台的架构设计实践》http://www.52im.net/thread-4008-1-1.html
引用:JackJiang 发表于 2022-07-01 11:08
说了这么多,我可能根本没理解你的意思是什么。

你要么直接说你想做什么功能,实现什么样的需求,不要 ...

所以你还是回到我刚说的啊。
假设服务端是一个自动回复机器人。会根据收到的消息123,,返回内容 你好。
现在客户端发个123。服务端收到后,onTransferMessage4C2S 监听对不对?
onTransferMessage4C2S监听到后。在方法处理的时候假设redis突然网络波动。出现异常。那就不会发回复给客户端了。
但是客户端又因为自动ack。导致以为消息发了。这样不会进行重发消息,所以用户就一直等不来服务端的自动回复 你好 这个内容。
明白吗?就是为啥onTransferMessage4C2S处理异常的情况下。应该认为是没收到消息。不应该自动ack啊。。不是应该根据onTransferMessage4C2S的处理情况去进行是否ack吗?
引用:li709854423 发表于 2022-07-01 17:39
所以你还是回到我刚说的啊。
假设服务端是一个自动回复机器人。会根据收到的消息123,,返回内容 你好。
...

我明白了。其实,c2s回调里,你再从服务端发出的消息,服务端也有QoS重传机制的,相当于这条消息是两段:
第一段,就是c到s,这个由c端完成QoS保证。
第二段,就是c再到接收端的c,这个由s端完成QoS保证。

具体你可以看一下这个接口:MessageQoSEventListenerS2C,你可以像客户端那样为服务端设置这个回调,并在回调进行消息无法正常送达的离线处理等。
签名: 《vivo手机上的系统级消息推送平台的架构设计实践》http://www.52im.net/thread-4008-1-1.html
引用:JackJiang 发表于 2022-07-01 18:40
我明白了。其实,c2s回调里,你再从服务端发出的消息,服务端也有QoS重传机制的,相当于这条消息是两段: ...

你还是没明白啊。。我知道第二段。但如果消息都说是在redis步骤就断 了。都还没调用往下发的那段呢
引用:li709854423 发表于 2022-07-01 21:16
你还是没明白啊。。我知道第二段。但如果消息都说是在redis步骤就断 了。都还没调用往下发的那段呢

你这redis到底什么作用
签名: 《vivo手机上的系统级消息推送平台的架构设计实践》http://www.52im.net/thread-4008-1-1.html
引用:JackJiang 发表于 2022-07-02 09:58
你这redis到底什么作用

我这里的redis只是举例。就是一种无法预料的网络波动。只要我调用了其他网络模块。比如写数据库。比如写redis。那网络突然波动导致异常可以不? 甚至我自己写个if(Random.next(2)==1 )throw new Exception都行。就是一种无法预料的异常,只要一异常。用户发的这消息服务端就当是收到了。但又没处理。
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部