IM系统设计实践(一)

一种推拉模式下的IM系统设计实践

IM系统简介

随着现在线上社交场景和社交方式越来越多,在社交中沟通是一个必要的环节,越来越多的app应用将IM功能作为必备核心功能之一,所以IM系统的设计也变得越来越重要,这里给大家介绍IM系统一种推拉结合方式的实现。
IM系统具有的基础功能有发送消息、查看消息、新消息推送、未读消息数,对于消息群主、消息已读、消息撤回、重新编辑、消息删除、对方正在输入中这些功能都是IM系统的业务功能,这里将会分开讨论。

系统架构设计

IM系统设计实践(一)

展示层
多端展示功能,我们希望实现最好的情况是支持web端、android端、ios端的展示,由于我们希望在不同的客户端都能够接入我们的IM系统,所以我们在连接层会支持不同的协议。
连接层
我们支持web端,在连接层需要接入websocket,因为websocket推送的支持我们才能更好地通知web端的用户。
我们支持android端,在连接层需要接入各个主流安卓厂商的推送,因为厂商的推送相对于其他第三方推送厂商更能够保障我们更高的推送到达率。
我们支持ios端,在连接层需要接入苹果apns推送,因为苹果支持官方的apns推送。
我们对于android端和ios端,除连接入厂商的推送,我们要保障有更高的推送到达率,我们还接入长连接推送(自开发)。
业务层
业务层主要功能是将私信复杂的业务进行聚合,与第三方服务和私信业务功能服务、私信基础功能服务进行交互。
存储接口层
存储接口层是对存储层基础功能做的一层封装,不涉及太多业务逻辑。

关键概念介绍

我们这是一种推拉结合的方式实现的该系统,所以我们这里查看消息功能(新消息订阅、历史消息查看)实现是通过拉取的方式实现,不是通过直接推送的方式实现,我们这里以用户A与用户B的聊天场景进行简单介绍。

消息会话列表
用户A对用户B发起聊天产生的会话我们在这里会记录为一次会话记录,用户A对多个用户形成的多个消息会话记录形成的列表我们这里叫做会话列表。
首屏消息列表
当用户B不在线,由于我们这里使用的是推拉结合的方式,我们存在用户A对用户B发送消息之后,这样怎样让用户B下次打开app的时候看到用户A给自己发送的聊天消息呢?这样就需要在用户B打开这个会话时第一时间看到用户A给自己发送的消息,看到一整屏的新消息,这里获取到的消息叫做首屏消息列表。
新消息列表
当用户B在线时,我们收到了用户A发过来的新消息推送,这个时候用户B就会主动获取用户A发给自己的新消息,这里获取到的消息叫做新消息列表。
历史消息列表

相关推荐