IM系统看似简单,没错,很多老板认为开发个qq和微信也就是几万块钱的事…,实责是众多技术的应用合体,包括网络编程、移动开发、后端开发、高并发、高可用、高安全等技术范畴,再加上多端使用不同的编程语言,想要凑齐一个典型的IM产品技术栈那也不是个容易事。
本系列文章将尽量从理论概念入手,通俗易懂的梳理IM中的基础技术概念和热门技术点,希望能帮你理清看似一团乱麻的IM知识体系,帮助您了解。
快速了解一个主流IM系统的应用场景、技术特点和功能组成,快速建立对IM系统的主观认知。
IM的应用场景
IM其实并不局限于聊天、社交这类“典型”应用中,实际上它已经广泛运用于我们身边形形色色的软件中。
聊天、直播、在线客服、物联网等所有需要实时互动、高实时性的场景等等,都需要应用到IM技术。
下面这些场景是我们大家都熟悉的,都用到了IM技术:
1:微信、qq、钉钉等主流IM应用:这是IM技术的典型应用场景;
2:微博、知乎等社区应用:它们利用IM技术实现了用户私信等点对点聊天;
3:抖音、快手等直播/短视频应用:它们利用IM技术实现了与主播的实时互动;
4:米家等智能家居物联网应用:利用IM技术实现实时控制、远程监控等;
5:滴滴、Uber等共享家通类应用:利用IM技术实现位置共享;
6:在线教育类应用:利用IM技术实现在线白板。
IM技术的特点
IM技术的特点主要就是以下4点:
1:实时性
对于IM系统,“实时”二字是精髓,也是这项技术存在关键意义所在。它保证的是消息的实时触达。
举个例子:如果跟你的好友微信或qq聊天,我发的消息他不能即时收到,或者他发的信息你也不知道什么时候能收到,这基本上也就没法聊下去了,干吗不痛快打个电话呢。
2:可靠性
保证消息的不丢失和不重复,是IM系统的另一个关键技术特点。试想,当你在用qq或微信跟女朋友聊天,好不容易鼓起勇气向“她”表白,结果这消息要是丢包了,那肯定得卸载应用了,搞不好砸手机都有可能。当然,好话不说二遍,消息重复也同样恼人。
3:一致性
对于单聊消息而言,保证同一个设备的时间顺序、不同设备的漫游同步,也是相当重要的一环。
IM系统中的消息交互,就到底就是人跟人在“说话”,前言不搭理后言、或者胡言乱语式的消息展现,那不是人疯了就是程序疯了,总之就是没法再聊下去了。
4:安全性
保证数据传输安全、数据存储安全、消息内容安全,也是IM系统必不可少的特性。尤其在私聊场景下,如果不能做到安全性,聊天的体验跟被人偷窥的感觉是没有区别的。
IM的功能组成
1:联系人列表
这个很好理解,使用IM系统的第一步,就是要解决“跟谁聊”的问题。从功能表象上来说,联系人列表也就是社交关系列表,无非就是个信息列表界面,有什么特殊的地方?
联系人列表看似简单,实际上它是一系列IM系统的社交关系确立动作的结果体现。
总的来说,联系人列表的建立,是一个IM系统聊天关系确立的表现,不可或缺。
2:聊天界面
聊天界面看似很平常,实际它就是IM系统客户端的核心功能所在,所有主要的IM功能都是通过它展现。
它应该具备的能力有:
1:各种聊天功能按钮:语音留言、图片、文字、表情、文件、实时电话、实时视频等;
2:各种聊天消息显示:各种消息都有不同的UI显示元素和处理逻辑;
3:流畅的使用体验:大量不同类型的消息显示时,不能卡顿;
4:即时显示聊天消息:网络线程收到的消息,要马上在UI上显示出来;
5:历史消息的加载:上次聊过的内容也得显示出来吧。
以上只是简单罗列,这看似简单的聊天界面,能把上面列表的事情做好,工作量也不小吧。
消息存储
消息存储这个功能好理解,聊天的消息如果存储,下次再聊的时候就不知道之前聊过什么,做不到这一点,这个IM系统的聊天体验好不起来。
那么,哪些情况下需要进行消息存储呢:
1:对方不在线时:聊天消息应该存储,这叫离线消息存储。
2:对方在线时:聊天消息也要存到本地存储,这叫消息缓存)。
3:对方在线或不在线时:聊天消息都要存到服务端,用于实现多设备的消息漫游和同步。
IM系统的应用场景已经不单单是IM聊天应用这一种形态,它已经融入到互联网应用的方方面面,必竟谁都想自已的应用具备“实时”交互这种能力,因为体验太好了。
IM系统典型架构无非就是网络接入层、业务逻辑层、数据存储层,除开网络接入层,其它各层其实跟普通的应用系统看起来差别并不是太大。
IM系统的技术特点来说,就是实时性、可靠性、一致性、安全性,除了实时性对于多数应用来说并不关心,其它的指标也很好理解。