IM开发干货分享:有赞移动端IM的组件化SDK架构设计实践

本文介绍了有赞移动端IM组件化SDK的设计思路,目标是实现稳定可用的IM主流程、可定制化UI和消息传输层与UI的分离。内容涵盖Socket长连接的创建与维护、消息发送与接收流程、UI组件的可定制化以及数据加载策略。此外,还讨论了设计不足之处,如缺乏消息回执机制和本地请求超时判断。
摘要由CSDN通过智能技术生成

本文由有赞技术团队原创分享,原题“有赞 APP IM SDK 组件架构设计”,即时通讯网收录时有修订和改动,感谢原作者的无私分享。

1、引言

本文主要以Android客户端为例,记录了有赞旗下 App 中使用自研 IM,并将IM提炼成组件化SDK的设计思路 。此项工作由有赞移动开发组 IM SDK 团队共同讨论完成。

在有赞产品中,存在大量需要交易双方沟通交流的场景,比如,客户咨询商家产品信息,售前售后简单的答疑和维权等。另外,有赞业务还存在一些特殊的复杂场景,如供应商、分销商、客户三方之间需要同步沟通,会同时存在多种沟通角色。

此时需要较为完善的即时通信(IM)解决方案,但是由于有赞针对不同的商户和使用场景有多个APP,APP自行实现IM功能代价较大,且维护起来人力分散,于是,IM SDK项目便应运而生了,APP 通过接入此给件化SDK,可以快速实现IM基本功能。

2、设计目标

本次IM组件化SDK的设计目标有以下几点:

1)IM 主流程稳定可用:消息传输具有高可靠性;
2)UI 组件直接集成进入SDK,并支持可定制化;
3)富媒体发送集成进入SDK,并可按需定制需要的富媒体类型;
4)实现消息传输层SDK,与带有UI的SDK的功能分离,业务调用方既可以使用消息传输SDK,处理消息,然后自行处理UI,也可以使用带有UI组件的SDK,一步实现较为完备的IM功能。

3、整体结构

下图中简要描述了有赞客户端中IM系统的基本结构 :

如上图所示,各分层的职责分工如下:

1)消息通道层:维护Socket长连接作为消息通道,消息收发流程主要在这一层中完成;
2)持久化层:主要将消息存入数据库中,富媒体文件存入文件缓存中,方便第二次展示消息时候,从本地加载,而不是网络层获取;
3)逻辑处理层:完成各种消息相关的逻辑处理,如排序,富媒体文件的预处理等;
4)UI显示层:将数据在UI上进行呈现。

5、设计要点1:Socket长连接的创建与维护

IM SDK 所有数据收发流程,均通过Socket长连接完成,如何维护一个稳定Socket通道,是IM系统是否稳定的重要一环。

下面描述下Socket通道几个重要的流程。

1)创建流程(连接) :

如图上所示,当IM SDK初始化后,业务调用连接请求接口,会开始连接的创建过程,创建成功后,会完成鉴权操作,当创建和鉴权都完成后,会开启消息收发线程,为了维持长连接,会有心跳机制,特别的,会开启一个心跳轮询线程。

2)心跳机制 :

心跳机制,是IM系统设计中的常见概念,简单的解释就是每隔若干时间发送一个固定信息给服务端,服务端收到后及时回复一个固定信息,如果服务端若干时间内没有收到客户端心跳信息则视客户端断开,同理如果客户端若干时间没有收到服务端心跳回值则视服务端断开。

当长连接创建成功后,会开启一个轮询线程,每隔一段时间发送心跳消息给服务器端,以维持长连接。

有关IM心跳方面的专项文章,请见:

《 手把手教你用Netty实现网络通信程序的心跳机制、断线重连机制 》
《 为何基于TCP协议的移动端IM仍然需要心跳保活机制? 》
《 移动端IM实践:实现Android版微信的智能心跳机制 》
《 移动端IM实践:WhatsApp、Line、微信的心跳策略分析 》
《 一文读懂即时通讯应用中的网络心跳包机制:作用、原理、实现思路等 》
《 正确理解IM长连接的心

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值