IM 即时通讯技术的发展与应用:从社交聊天到多场景拓展

2024-07-30
来源:网络整理

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() {    @Override    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%优惠,适合有预算需求的中小企业和个人开发工作室。

分享