默认
发表评论 5
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已回复] 基于RainbowChat-Web的2开后,离线聊天消息重复显示问题
[已回复] 基于RainbowChat-Web的2开后,离线聊天消息重复显示问题_123.PNG
用户上线后收到离线消息,会重复显示,刷新之后才会正常显示,这是什么原因啊?

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

推荐方案
评论 5
这就奇怪了,有改动什么代码吗?

另外,你公司叫什么?我查一下版本号
引用:JackJiang 发表于 2021-03-02 11:29
这就奇怪了,有改动什么代码吗?

另外,你公司叫什么?我查一下版本号

淳华科技(昆山)有限公司
我把那个rbchat_cache.js这一段代码中的回调函数删掉之后,就不会有重复消息显示了,但是消息提示那个红点没了
Cache4.prototype.loadOfflineMessagesAsync = function (from_user_uid, fn_callback_for_success) {

        var localUserUid = LocalUserInfo.getUid();

        // 通过rest接口获取离线聊天数据(详见:“【接口1008-4-8】获取离线聊天消息的接口”的文档或服务端源码)
        RBChatRestHelper.submitGetOfflineChatMessagesToServer(localUserUid, from_user_uid, function (returnValue) {

            // 服务端返回的是java 1维Vector<OfflineMsgDTO>对象数组
            // 对象OfflineMsgDTO的文档,详见:[url]http://docs.52im.net/extend/docs[/url] ... /OfflineMsgDTO.html
            var offlineMessagesList = JSON.parse(returnValue);

            // 回调通知
            if (fn_callback_for_success)
                fn_callback_for_success(offlineMessagesList);
        }, function (errorThrownStr) {
            RBChatDialogHelper.showAlertDialog_WARN('載入失敗', (from_user_uid ? '與' + from_user_uid + '的' : '') + '離線聊天訊息載入失敗,可能是伺服器發生錯誤或是網路問題,請稍後再試!');
        });
    };
引用:追风筝的人 发表于 2021-03-02 11:56
淳华科技(昆山)有限公司
我把那个rbchat_cache.js这一段代码中的回调函数删掉之后,就不会有重复消息显示 ...

看到你公司了,你这个项目应该有持续2开了2、3年了。文字都改成繁体了,应该是动过不少代码逻辑了。
默认版本的代码里,不存在这种问题的。你如果有默认的版本,如果能把默认没改过的代码版本跑起来对照一下看看效果,那是最好的。

重复肯定是另有原因,没必要盲目凑代码去删掉。
也没什么好怕的,那就来调试吧。

你先这样去诊断,先排险服务端读取过来的时候就是不重复的:

  • 1)在后台数据库里,确定,离线消息的条线(就是排除数据库里的,不是重复的);
  • 2)加载到的离线消息,也就是你回复的这个方法里,看看取到的是几条;

引用:JackJiang 发表于 2021-03-02 12:23
看到你公司了,你这个项目应该有持续2开了2、3年了。文字都改成繁体了,应该是动过不少代码逻辑了。
默 ...

数据库没问题,
我怀疑是显示离线消息的时候,同时读取缓存和数据库中的离线消息,将这俩里面的离线消息同时显示出来,然后因为数据库已被读取的离线消息记录被删除,刷新页面之后又恢复正常.
那如果我把显示离线消息那里删掉的话,只读取缓存里的离线消息,这样又不会出现消息提示.
我这样的推断是没错的吧?如果是这样的话,怎么让他出现消息提示的红点?
引用:追风筝的人 发表于 2021-03-02 14:35
数据库没问题,
我怀疑是显示离线消息的时候,同时读取缓存和数据库中的离线消息,将这俩里面的离线消息同 ...

数据库没错,那就好办了。

余下的,你就查:这个离线数据是:

1)什么时候加载到缓存中的;
2)什么地方加载到缓存中的;
3)是否是缓存中就已经重复了。
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部