IM即时通讯技术的发展
即时通讯( )是一种基于互联网的即时通讯服务。
实时聊天交互是目前市面上主流APP的重要功能之一,大家耳熟能详的就是微信、QQ等聊天消息系统,IM看似简单,但技术开发却并不容易,海量并发、超低延迟、消息传递等需要融合多种技术。
近年来,随着移动互联网的深度渗透和社交+的快速发展,IM催生出了很多新的玩法,不仅仅应用于社交聊天场景,还出现在电商、直播、客服等各个场景,正在被人们广泛应用。
调查数据显示,目前市面上超过60%的APP都具备即时通讯功能,用户可以直接在APP内与其他用户进行实时聊天,有助于提升APP活跃度和用户体验,IM功能的实现已经成为APP开发者的必修课。
笔者从事IM开发十余年,本文主要分享IM开发的三种实现方法,希望对IM开发者有所帮助。
实现 IM 的 3 种方法
开发IM有三种方式:1.开源代码 2.自行开发 3.集成IM SDK,开发者可以根据项目情况进行选择。
一款IM产品的实现一般可以分为三个重要部分:客户端开发、服务端开发、服务运维。
表:IM3 实现方法
\实现方式对比维度开源代码自研一体化商用IM SDK
困难
低的
高的
中间
功能可扩展性
依赖开源项目计划相对困难
不依赖外界条件,比较简单
依赖其他制造商,难度中等
运营和维护成本
自行运维,成本较高
自行运维,成本较高
无需自行操作和维护
在线周期
中间
慢的
快的
对于人们
个人经验
拥有强大研发实力的大公司
中小型公司、个人工作室
第一种实现方式:利用开源项目实现IM聊天
实现IM功能最快的方式就是选择开源项目,不仅站在巨人的肩膀上,还能汇聚整个社区的智慧,快速发展;
IM开源项目该如何选择?项目功能的完备性和活跃度是主要参考维度,根据以往的经验,我挑选了两个比较不错的开源项目供大家参考。
1.
项目地址:/…
原创移动IM通讯层框架,轻量级,高度精致,历经8年考验,是目前市面上唯一同时支持UDP+TCP+三种协议的开源框架,支持iOS、Java、H5,服务端基于。
PS:需要注意的是,该项目H5端尚未开源,小程序还在开发中。
2.
项目地址://O…
创始团队来自资深IM架构师,由IM/专家团队开发,致力于以开源技术创造服务价值,构建轻量级、高可用的IM架构,方便开发者构建各种即时通讯及实时音视频交互场景。
借鉴开源项目适合开发周期紧张,不需要太多定制化开发人员的情况,可以帮助开发者快速实现IM功能。但功能一般都比较简单基础,后续功能扩展严重依赖开源项目的开发进度。如果你对定制化功能需求较高或者未来业务量比较大,建议不要偷懒,采用此方式。
对IM定制化和研发能力要求较高的团队一般会采用自研的方式,接下来和大家分享一下自研过程中的技术难点和坑点。
第二种实现方式:自开发IM聊天
IM技术涉及领域广泛,自主开发对研发团队能力和资金投入要求较高,研发周期也会较长,为避免错失商机,需做好长远规划。
如图:自主研发技术概览
我们在开发自己的IM的过程中也遇到了一些比较棘手的技术问题,下面列出一些供大家参考,比如
如果你对这些问题感兴趣的话,还可以参考优秀的IM学习网站( :)。
在自主开发过程中,部分功能也可以直接使用市面上成熟的产品,比如文件存储、安全审计、离线消息推送等,加快研发速度。如果以后决定开发这些功能,也可以轻松替换,达到事半功倍的效果。
对于有经济和发展实力,且业务预计会有大量客户的企业,建议采用自主开发的实现方式,符合后期能力扩展、快速迭代、稳定运维的规划。
但自研需要投入大量的人力和财力,建议有意自研的开发者做好明确的开发计划,减少不必要的损失。
引入开源项目无法有效扩展新功能,运维复杂,难以支撑未来长期发展;自研路线周期长,成本高。
有没有折中的方案?不用投入那么多成本就能快速上线,还可以定制化。集成商业SDK是最便捷的方式,也是目前主流的开发模式。现在SDK厂商已经非常成熟,很多公司都会选择这种方式。
第三种实现方式:集成商业IM SDK,实现IM即时通讯
集成商业SDK有以下优势:
IM即时通讯产品实现流程
当您选择集成商业SDK时,产品实现流程如下:
可以看出,集成商业SDK的方案只需要开发简单的业务后台,然后集成SDK,开发自己的应用程序,然后快速上线服务即可。
IM SDK厂商推荐-爱奇艺IM SDK
市面上已经有很多成熟的IM SDK厂商,这里推荐一家不错的厂商——智谷科技(doc-zh.zego.im//115...)。之前开发的直播产品接入了智谷的RTC SDK,整个接入过程非常顺利。最近因为项目需要实现即时通讯功能,同一家厂商为了方便接入了ZEGO IM SDK,试用了一下,没想到很快就开发完成了。
ZIM支持所有主流平台,包括两个跨平台框架,加速产品上线。在消息安全审计方面,他们利用主流第三方安全厂商的服务,基本可以支持所需的审计功能。
随着实时通讯项目业务的不断发展,对通讯服务的高可用/高并发/低延迟的要求越来越高。我之前用过他们的RTC产品,低延迟在业界领先,性能优异。我测试过IM产品的集成demo,端到端延迟只有几十毫秒。
机狗的IM产品不仅支持基本的单聊/群聊功能,还支持高消息并发的房间聊天,根据官网数据显示,单个房间人数可达百万以上,适合对房间人数要求较高的场景使用。此外还有非常新颖的呼叫邀请功能,满足即时通讯的需求。
经验分享:基于ZIM实现即时通讯
应项目需求,我选择了ZIM来实现单聊场景消息收发,只需要简单的两步,半天时间就可以完成整个流程。下面是我分享的如何快速实现单聊场景消息收发的经验,有兴趣的朋友可以查看Zego官网(doc-zh.zego.im//115...),这里就不再赘述了。
IM最常见的使用场景是点对点消息传递,这里我们以在上发送和接收短信为例。
3步轻松发送和接收即时通讯消息 1.初始化IM SDK
获取 ZIM 实例
zim = ZIM.create(appID, application);
2. 登录 ZIM
类似于登录微信账号的操作,作为发送和接收消息的媒介。
void login(ZIMUserInfo userInfo,String token,ZIMLoggedInCallback callback)
对应的UI示例:
3. 发送者打电话发送单次聊天短信
登录之后就可以调用这个接口,填写你想要发送的消息,填写接收端,需要发送的时候调用就可以了。
界面显示:
void sendPeerMessage(ZIMMessage message,String toUserID,ZIMMessageSendConfigconfig,ZIMMessageSentCallback callback)
对应的UI示例:
4.IM接收端接收消息
(1)通过注册事件回调的接收对象
IM运行过程中会发生各种事件:收到消息,网络连接中断等等,通过此接口可以接收ZIM抛出的事件,以便App做出相应的响应。
void setEventHandler(ZIMEventHandler handler)
(2)在注册的事件回调的接收对象中重写接收单聊消息的方法
zim.setEventHandler(new ZIMEventHandler() { public void onReceivePeerMessage(ZIM zim, ArrayList messageList, String fromUserID) { } });
相应的 UI 示例
这使得点对点文本消息传递成为可能。
另外,ZIM SDK 还支持富媒体消息的发送和接收,包括图片、视频、音频和文件等,发送富媒体消息时只需要将文件路径传入接口,从回调中即可获取上传进度。
5. 消息收发多样化:发送富媒体消息
void sendMediaMessage(ZIMMediaMessage message,String toConversationID,ZIMConversationType conversationType,ZIMMessageSendConfigconfig,ZIMMessageSentCallback callback)
UI示例,以发送图片为例,从相册读取图片并压缩保存在APP目录下,传入本地图片的路径,进行调用,并相应显示在UI上。
一旦第一次发送点对点消息或者群聊消息,就会创建相应的会话。
我们知道UI的更新都是由数据来驱动的,这里驱动UI变化的就是抛出的更新事件回调,应用层只需要维护一个列表,在抛出这个事件的时候及时更新列表,驱动UI刷新即可。
会话更新 API
void onConversationChanged(ZIM zim,ArrayList conversationChangeInfoList)
总结:机购IM SDK结合RTC SDK实现音视频/直播实时聊天
另外,ZIM SDK 还支持房间、群组的使用,不需要二次封装,只需要绘制相关 UI 并使用 SDK 接口提供的数据驱动即可实现相应功能。这里就不细说了,如果大家有兴趣,我后续会更新相关文章,或者去 ZEGO 官网查看相关文档:doc-zh.zego.im//143…
同时,ZIM SDK与爱奇艺自有的RTC SDK结合,可以实现多种音视频场景下的用户交互,适合有直播、语音聊天室等场景需求的开发者和公司。
近期有开发计划的开发者可以关注官网,适逢七周年,全线音视频/直播产品均推出10%优惠,适合有预算需求的中小企业和个人开发工作室。