即时通讯(Instant Messaging)是一种基于互联网的即时交流消息的业务。
实时聊天交互功能是市面上主流APP的重要功能之一,人们所熟悉的就是微信,QQ的聊天消息系统,IM看似简单,技术开发绝非易事,海量并发,超低延时,消息必达等高实时性需求需要众多技术的应用合体;
近几年,随着移动互联网的深入渗透和社交+的迅速发展,IM衍生出了很多新的玩法,不仅仅应用于社交聊天场景,还出现在电商、直播、客服等各种场景,正在被人们广泛的应用。
调研数据显示:市面上60%以上的APP拥有即时通讯能力,用户可以直接在app内跟其他用户实时聊天,有助于提升app活跃和用户体验。IM功能的实现已成为应用开发者们必修课程。
笔者从事IM开发工作十年有余,本文主要分享IM开发的3种实现方式,希望对IM开发者有所帮助。
IM开发的3种实现方式分别为:1、开源代码 2、自研 3、集成IM SDK。开发者可根据项目情况进行选择。
一个IM产品的落地,大体上可以分成三个重要部分:客户端开发,服务端开发,服务运维。
表:IM3种实现方式
\实现方式 对比维度 | 开源代码 | 自研 | 集成商业IM SDK |
---|---|---|---|
实现难度 | 低 | 高 | 中 |
功能扩展性 | 依赖开源项目计划,相对困难 | 不依赖外部条件,相对简单 | 依赖其它厂商,难度中等 |
运维成本 | 自己运维,成本高 | 自己运维,成本高 | 不需要自己运维 |
上线周期 | 中 | 慢 | 快 |
适用人群 | 个人体验 | 研发能力较强的大公司 | 中小型公司,个人工作室 |
实现IM功能最快的方式就是选择开源项目,不仅是站在巨人的肩膀上,还可汇集全社区的智慧进行快速开发;
如何选择IM的开源项目?项目功能的完善度和活跃度是主要参考的维度,根据过往经验我选取了两个还算不错的开源项目供大家参考。
项目地址:https://github.com/JackJiang2011/MobileIMSDK
MobileIMSDK是一个原创移动端IM通信层框架,轻量级、高度提炼,历经8年、久经考验。是市面上唯一同时支持UDP+TCP+WebSocket三种协议的同类开源框架,支持iOS、Android、Java、H5,服务端基于Netty。
PS:需要注意的是该项目的H5端暂未开源,小程序与Uniapp也还在开发之中。
项目地址:https://github.com/OpenIMSDK/Open-IM-Server
OpenIM的创始团队来自IM高级架构师 ,由IM/WebRTC专家团队开发,致力于用开源技术创造服务价值,打造轻量级、高可用的IM架构,方便开发者构建多种即时通讯及实时音视频互动场景。
借鉴开源项目适合开发周期紧,无需太多定制化开发者,可帮助开发者快速实现IM功能。但功能一般相对简单基础,且后续的功能扩展严重依赖开源项目的开发进度。如果对定制化功能需求比较高,或者未来业务体量比较大,建议不要偷懒去使用这种方式。
对IM定制化要求高有研发能力的团队一般采取自研的方式,接下来会跟大家分享下自研过程中的技术难点和坑点。
IM技术涉及范围很广,完全自研对研发团队能力、资金投入要求都比较高,研发周期也会拉的比较长。为了防止错失商机,需要做好长期的规划。
如图:自研技术概览
我们在自研IM过程中,也遇到了一些比较棘手的技术难题,这里列出来给大家做个参考,比如
对这些问题感兴趣,也可以参考优秀IM学习网站(即时通讯网:http://www.52im.net/)。
自研过程中,有些功能也可以直接使用市面上的成熟产品,比如文件存储,安全审核,消息离线推送。以加快研发步伐。未来如果决定自研这部分功能,也可以很方便的替换掉,达到事半功倍的效果。
对于有经济和开发实力的企业,且业务预期客户体量大,建议走自研的实现方式,符合后期能力拓展、快速迭代和稳定运维的规划。
但自研需要投入较大的人力、财力,建议想要走自研的开发者,做好明确的开发规划,减少不必要的损耗。
引入开源项目,无法很好的扩展新功能,且运维复杂,难以支撑未来的长期发展;自研路线周期长,成本较高。
那有没有折中一点的方案呢?既可以快速上线,又不用投入那么大的成本,还可以定制化需求。集成商业sdk则是最便捷的方式,这也是目前较主流的开发模式。现在sdk厂商都很成熟,很多公司会选择此方式。
集成商业sdk具有以下优势:
选择集成商业sdk时,产品落地流程如下:
由此可见,集成商业sdk的方案,只需要开发一个简单的业务后台,然后集成sdk,开发自己的应用程序,即可快速上线服务。
当前市面上已经有不少成熟的IM SDK厂商,在这里推荐一家不错的厂商–即构科技(https://doc-zh.zego.im/article/11598)。之前开发的直播产品接了即构的RTC SDK,整个接入过程很顺畅,近期因项目需实现即时通讯功能,同一厂商图方便抱着尝试态度接入ZEGO IM SDK,没想到很快就完成开发实现了。
ZIM支持所有主流平台,包括flutter和uniapp两大跨平台框架,加速产品上线。在消息安全审核方面,他们采用主流第三方安全厂商的服务,需要的审核功能基本都能够支持。
实时通信的项目随着业务不断发展,对通信服务的高可用/高并发/低延时有更高的要求。之前使用他们的RTC产品,低延迟业内领先表现很优秀。IM产品我拿集成的Demo测试了下,端到端延只有几十毫秒。
即构的IM产品不仅支持基础的单聊/群聊功能,还支持消息高并发量的房间聊天,官网数据显示:单房间人数支持到百万以上,适合对房间人数要求高的场景使用。另外还有很新颖的呼叫邀请功能,满足即时通讯的需求。
应项目需求笔者选用ZIM实现单聊场景消息收发,仅有简单2步整个过程半天搞定。以下以本人的经验分享如何快速实现单聊场景消息收发。集成sdk过程感兴趣的小伙伴到即构官网查看(https://doc-zh.zego.im/article/11598),在此不赘述。
IM 的使用场景中比较常见的是点对点消息,这里我们以安卓端收发文本消息为例。
获得一个 ZIM 实例
zim = ZIM.create(appID, application);
类比微信账号登录的操作,用来作为收发消息的载体
void login(ZIMUserInfo userInfo,String token,ZIMLoggedInCallback callback)
对应 UI 示例:
登录后便可调用该接口,在 message 填上想要发送的消息,在 toUserID 填上接收端的 userID,想要发送时调用即可
接口展示:
void sendPeerMessage(ZIMMessage message,String toUserID,ZIMMessageSendConfigconfig,ZIMMessageSentCallback callback)
对应 UI 示例:
(1) 通过 setEventHandler 注册事件回调的接收对象
IM 运行过程中会有各式各样的事件产生:收到了一条消息、网络连接中断等,通过该接口便可以接收 ZIM 抛出的事件,以便 App 做出相应的反应。
void setEventHandler(ZIMEventHandler handler)
(2) 在注册事件回调的接收对象中重写接收单聊消息的方法
zim.setEventHandler(new ZIMEventHandler() {
@Override
public void onReceivePeerMessage(ZIM zim, ArrayList messageList, String fromUserID) {
}
});
对应 UI 示例
由此我们实现了点对点文本消息的收发。
By the way, ZIM SDK 也支持富媒体消息的收发,包括图片、视频、音频和文件。发送富媒体消息时只需要将文件的 path 传入接口,上传进度可从 progress 回调中获得。
void sendMediaMessage(ZIMMediaMessage message,String toConversationID,ZIMConversationType conversationType,ZIMMessageSendConfigconfig,ZIMMessageSentCallback callback)
UI 示例,以发送图片为例,从相册读取图片并压缩保存到 APP目录下,将本地图片的 path 传入 ZIMImageMessage, 并调用 sendMediaMessage,UI 上做对应展示即可。
一旦点对点消息和群聊消息首次被发送,对应的会话随即产生。
我们知道 UI 的更新都是由数据驱动的。驱动此处 UI 变化的,是 ZIMEventHandler 抛出的会话更新事件回调,应用层只需要维护一份会话列表,在此事件抛出时及时更新列表,并驱动 UI 刷新即可。
会话更新接口
void onConversationChanged(ZIM zim,ArrayList conversationChangeInfoList)
此外 ZIM SDK 还支持房间、群组的用法,无需去二次封装,绘制相关 UI 并使用 SDK 接口提供的数据驱动即可实现对应功能。此处不再展开叙述,感兴趣的笔者之后会更新相关的文章,或者去 ZEGO 官网去查看相关文档: https://doc-zh.zego.im/article/14314?
同时ZIM SDK结合即构自家的RTC SDK实现各类音视频场景的用户互动,适合Avatar , 直播,语聊房等场景的开发者和有需求企业。
近期有开发规划的开发者可上即构官网查看,恰逢即构七周年全线音视频/直播产品1折的优惠,适合有预算要求的中小型企业和个人开发工作室。
笔者为大家争取到小福利:提交表单有专业销售联系您,可获得即构IM SDK 1个月免费试用。
填写领取: