默认
发表评论 28
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
能把你说的这整个过程拍个视频吗,我看看你说的具体是什么样的效果?

或者你把界面的表现,按照你说的顺序,依次截图,让我理解你做是什么样的功能操作,以及对应的界面上是什么表现。

然后我按照你的具体操作来帮你分析情况。
评论 28

好的,晚点帮你看
你明白你说的了,你的意思是,你的接收端非正常退出,服务端无法及时知道对方已掉线的这个间隔期内(这种情况下,服务端只能在超时到来后才知道对方已掉线),发送的消息,不知道去哪里了是吗?
引用:111111111111111 发表于 2020-09-28 08:54
我现在是把这种离线的 和无法送达的消息都存缓存里了  然后用户上线的时候他在拉取  但是现在只能拉取到 ...

你确切地回答我6楼的问题,是还是不是就好了。这样我就可以准确给你答案了。因为,我担心我想的,跟你想的不是同一个东西。
引用:111111111111111 发表于 2020-09-28 10:01
是的   这种无法到达的消息  如何处理比较好

im里为了保证消息的送达,其实是个非常复杂的事情。你说的这种情况,是保证消息不丢的一个非常刁钻的维度,没有经验的开发者通常都会搞丢。

我来引导你理解一下这个问题:你现在的疑惑就是,这个超时时间内的消息无法送达,但是它又不走离线,它去哪了,你现在不明白?是不是这样?

你直接回答我的问题就好了。我按你的回答难你合适的答案。

好的,我来告诉你,这种情况下的消息,该从哪里拿到。

这种情况下,因为客户端的非正常退出,TCP协议对于这种情况是无能为力的,服务端也是无法知道客户端此时的“在线”状态是“脏”的,不准确的。

但MobileIMSDK的QoS消息送达保证机制还有最后一道防线:也就是,无论客户端非正常退出、还是崩溃、或者是服务端线程执行等等过程中发生任何错误,只要对方没有回复ACK应答包,就通通不认为消息“已送达”。

所以:你帖子里描述的极端情况,MobileIMSDK可以通过QoS事件回调,获知哪些消息发送时对方是“在线”但并未真正收到,可以在这个事件通知里对这些消息进行离线存储,下面是RainbowChat产品中的实现,你参考一下:
[已回复] 求助MobileIMSDK客户端在接收方断网重连情况下有消息服务端会转发失败_1.jpg
[已回复] 求助MobileIMSDK客户端在接收方断网重连情况下有消息服务端会转发失败_2.jpg
引用:111111111111111 发表于 2020-09-28 15:07
我目前是已经离线存储这些未送达的消息     但是按视频中的操作    这些存进去的消息他不是一个时间上的  ...

你后端的逻辑搞复杂了,只要是对方在线未送达的,立马存库,对方上线后,用http接取离线。就这么点事,千万别搞复杂,什么没上线就先存,逻辑绕太复杂了,im里的逻辑是一定要简化,能简单绝不能搞复杂。因为im从底到上本身就很繁杂,业务层再弄复杂,那就要死人了
引用:111111111111111 发表于 2020-09-28 15:33
用户上线后拉取离线消息                 然后又有未送达的消息     这部分消息等用户下次上线在拉取吗   ...

上线后就应该是“在线状态”,以后的消息都应该在线送达才对怎么会还存在未送达的消息呢
引用:111111111111111 发表于 2020-09-28 15:48
有没有可能   就是上线前  有部分消息没有走完处理    接收方上线完之后    才保存进去的

不太可能。

你们把服务端的逻辑做一下减法,去掉你们自已加的复杂内容。离线就是存库,上线就是http接离线。没别的逻辑了。
我大致明白你们的意思了。

你们试着改一下服务端的参数,把这个类的源码复制到你们工程(目的是覆盖sdk的jar中的同名文件):https://gitee.com/jackjiang/MobileIMSDK/blob/master/sdk_src/Server/MobileIMSDKServer_Open/src/net/x52im/mobileimsdk/server/qos/QoS4SendDaemonS2C.java

修改后的代码内容为:
/*
 * Copyright (C) 2020  即时通讯网(52im.net) & Jack Jiang.
 * The MobileIMSDK v5.x Project. 
 * All rights reserved.
 * 
 * > Github地址:[url]https://github.com/JackJiang2011/MobileIMSDK[/url]
 * > 文档地址:  [url]http://www.52im.net/forum-89-1.html[/url]
 * > 技术社区:  [url]http://www.52im.net/[/url]
 * > 技术交流群:320837163 ([url]http://www.52im.net/topic-qqgroup.html[/url])
 * > 作者公众号:“【即时通讯技术圈】”,欢迎关注!
 * > 联系作者:  [url]http://www.52im.net/thread-2792-1-1.html[/url]
 *  
 * "即时通讯网(52im.net) - 即时通讯开发者社区!" 推荐开源工程。
 * 
 * QoS4SendDaemonS2C.java at 2020-8-22 16:00:59, code by Jack Jiang.
 */
package net.x52im.mobileimsdk.server.qos;

import java.util.ArrayList;

public class QoS4SendDaemonS2C extends QoS4SendDaemonRoot
{
	private static QoS4SendDaemonS2C instance = null;
	
	public static QoS4SendDaemonS2C getInstance()
	{
		if(instance == null)
			instance = new QoS4SendDaemonS2C();
		return instance;
	}
	
	private QoS4SendDaemonS2C()
	{
		super(2000, 0 , -1, true, "-本机QoS");  // 修改了此行!!!!!将原“0”改为了2000现值。
	}
}

用新的代码重新编译,再试。
引用:111111111111111 发表于 2020-09-29 11:47
改成2000之后 还是会有   但是数量没有以前多了

把第3个参数的“-1”改成“3”,再试试
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部