本文由阿里闲鱼技术团队景松分享,原题“到达率99.9%:闲鱼消息在高速上换引擎(集大成)”,即时通讯网有修订和改动,感谢作者的分享。
- (void)combileMessages:(NSArray<PMessage*>*)messages { ... // 1. 根据消息MessageId进行去重 NSMutableDictionary *messageMaps = [self containerMessageMap]; for (PMessage *message in msgs) { [messageMaps setObject:message forKey:message.messageId]; } // 2. 消息合并后排序 NSMutableArray *tempMsgs = [NSMutableArray array]; [tempMsgs addObjectsFromArray:messageMaps.allValues]; [tempMsgs sortUsingComparator:^NSComparisonResult(PMessage * _Nonnull obj1, PMessage * _Nonnull obj2) { // 根据消息的timestamp进行排序 return obj1.timestamp > obj2.timestamp; }]; ... }
消息到达率 = 客户端实际收到的消息量 / 客户端应该收到的消息量
来源:即时通讯网 - 即时通讯开发者社区!
轻量级开源移动端即时通讯框架。
快速入门 / 性能 / 指南 / 提问
轻量级Web端即时通讯框架。
详细介绍 / 精编源码 / 手册教程
移动端实时音视频框架。
详细介绍 / 性能测试 / 安装体验
基于MobileIMSDK的移动IM系统。
详细介绍 / 产品截图 / 安装体验
一套产品级Web端IM系统。
详细介绍 / 产品截图 / 演示视频
引用:客户端发送的逻辑是直接基于http的所以暂时不用做重试,主要是在服务端往客户端推送的时候,会加上重试的逻辑。
引用:当A发送的消息(黄色)首先到达服务端,因为前面没有其他version的消息,所以会将原数据返回给A,客户端A接收到消息的时候,再跟本地的消息做合并,只会保留一条消息。同时服务端也会将此消息发送给B,因为B本地也有一个version=1的消息,所以服务端过来的消息就会被过滤掉,这就出现消息丢失的问题。
引用:椎锋陷陈 发表于 2021-09-26 10:14 文章信息量较多,阅读后产生的疑问也比较多,望Jack Jiang大佬不吝赐教:
引用:逍遥小子 发表于 2021-09-26 10:17 推拉隔离的设计,避免多次网络请求的问题。 没有明白是怎么避免多次网络请求的
引用:JackJiang 发表于 2021-09-26 12:14 1)其实它还是有个双向互通的长连接,只是为了发送时省掉QoS送达保证机制,就用http了,因为http是请求响 ...
引用:椎锋陷陈 发表于 2021-09-26 14:14 谢谢JackJiang大佬解答,的确整篇文章看下来,就感觉很多地方的实现有点迷惑。。。
引用:Feng_N7pwQ 发表于 2021-10-25 14:47 问题确实很多,大厂的IM系统能架构成这样,确实让人汗颜但是也有值得学习的地方,
精华主题数超过100个。
连续任职达2年以上的合格正式版主
为论区做出突出贡献的开发者、版主等。
Copyright © 2014-2022 即时通讯网 - 即时通讯开发者社区 / 版本 V4.4
苏州网际时代信息科技有限公司 (苏ICP备16005070号-1)
Processed in 0.171882 second(s), 40 queries , Gzip On.