来源:即时通讯网 - 即时通讯开发者社区!
轻量级开源移动端即时通讯框架。
快速入门 / 性能 / 指南 / 提问
轻量级Web端即时通讯框架。
详细介绍 / 精编源码 / 手册教程
移动端实时音视频框架。
详细介绍 / 性能测试 / 安装体验
基于MobileIMSDK的移动IM系统。
详细介绍 / 产品截图 / 安装体验
一套产品级Web端IM系统。
详细介绍 / 产品截图 / 演示视频
一套纯血鸿蒙NEXT产品级IM系统。
详细介绍 / 产品截图 / 安装
引用此评论
/** * 消息未送达的回调事件通知. * * @param lostMessages 由MobileIMSDK QoS算法判定出来的未送达消息列表(此列表 * 中的Protocal对象是原对象的clone(即原对象的深拷贝),请放心使用哦),应用层 * 可通过指纹特征码找到原消息并可以UI上将其标记为”发送失败“以便即时告之用户 */ @Override public void messagesLost(final ArrayList<Protocal> lostMessages) { logger.debug("【QoS_S2C事件[未实时送达]】收到系统的未实时送达事件通知,当前共有" +lostMessages.size()+"个包QoS保证机制结束,判定为【无法实时送达】!"); if(lostMessages.size() > 0) { // 将处理放在独立的线程池中处理以提升处理效率,防止在大用户量时阻塞主服务 CommonConcurrentExecutor.getInstance().execute(() -> { // 大数据量的情况下,iterator性能要大大优于普通的数组for循环 Iterator<Protocal> pit = lostMessages.iterator(); while(pit.hasNext()) { Protocal p = pit.next(); if(p != null) { try { // 一对一好友聊天的消息因走的是C2C消息路径,所以不需要在QoS机制中处理聊天记录了, // 因为它已在 ServerEventListener.onTransferMessage4C2C()中处理,这里再做就会重复哦 if(p.getTypeu() == UserProtocalsType.MT03_OF_CHATTING_MESSAGE) { ChatServerLauncher.getInstance().getServerEventListener().onTransferMessage_RealTimeSendFaild_impl(p, true); } else { ChatServerLauncher.getInstance().getServerEventListener().onTransferMessage_RealTimeSendFaild_impl(p, false); } } catch (Exception e) { logger.warn("【QoS_S2C事件[未实时送达]】离线处理出错了,原因是:"+e.getMessage(), e); } } } }); } }
引用:JackJiang 发表于 2026-02-04 19:45 是的,你说的这种情况是有可能发生的,但MobileIMSDK的服务端有QoS机制兜底的,也就是服务端发出的消息,它 ...
引用:hyf123 发表于 2026-02-05 08:39 好的 感谢 我试了通过这种兜底方式可以解决断网情况下消息丢失的问题
精华主题数超过100个。
积极发起、参与各类话题的讨论等,主题、发帖内容较有价值。
连续任职达1年以上的合格正式版主
为论区做出突出贡献的开发者、版主等。
Copyright © 2014-2026 即时通讯网 - 即时通讯开发者社区 / 版本 V4.4
苏州网际时代信息科技有限公司 (苏ICP备16005070号-1)
Processed in 0.109375 second(s), 38 queries , Gzip On.