iOS开发攻城狮的集散地iOS即时通讯架构之路

自研IM系统方案设计

2018-10-07  本文已影响87人  caison

本文主要介绍APP功能中的IM模块的设计方案

1 设计原则

架构设计的目的在于解决系统复杂度问题,真正优秀的架构都是企业当前人力、条件、业务等各种约束下设计出来的,能够合理地将资源整合在一起并发挥出最大功效、并且能够快速落地。

2 系统复杂度分析

2.1 优先重点考虑

2.2 相对重点考虑

2.3 其他

3 设计备选方案

3.1 通信方案

个推+http接口方案

3.2 存储方案

方案1: 聊天记录服务端存储

方案2: 聊天记录客户端存储

4 方案评估和选择

基于成本和快速开发的考虑,选择个推+http接口方案,聊天消息保存服务端

5 关键难点解决方案

字段名定义
clientMsgId 消息的客户端UUID,不重复,由客户端生成
serverMsgId 消息的服务端ID,不重复,由服务端递增规则生成,
msgIsResend 消息是否是重发消息,1-是,0-否

hasMsgToReceive 是否有消息待接收,1-是,0-否
msgAccept 消息是否成功被服务端接收,1-是,0-否

5.1 APP新旧版本兼容

新旧版本APP兼容方案

5.2 发送消息与接收到的消息乱序问题

5.3 消息发送传输失败重发问题

5.4 发消息时拉取消息消息包过大问题

客户端获取消息的有序性
在一个聊天对话中,客户端本地已有消息的时间戳(服务端创建),总是处于服务端的所有待收消息的时间戳的过去时间。

下图只有A情况满足有序性条件

实际使用上,积压大量消息未接收发生的概率极小,初步解决如下

5.5 拉取未读消息传输失败问题

image.png

6 其他待解决问题

6.1 在线客服聊天系统迁移

在线客服系统还是使用了环信收费聊天,迁移方案待定

6.2 敏感内容,信息过滤监控

暂时不做

6.3 消息“已读”、“未读”的标记展示

暂时不做

6.4 客户端删除聊天消息

暂时不做

参考

基于netty的异步非阻塞实时聊天(IM)服务器——github

陌陌IM通信架构

IM通讯云技术路线的选择

网易IM云千万级并发消息处理能力的架构设计与实践

上一篇下一篇

猜你喜欢

热点阅读