IM系統(tǒng)看似簡(jiǎn)單,沒錯(cuò),很多老板認(rèn)為開發(fā)個(gè)qq和微信也就是幾萬塊錢的事...,實(shí)責(zé)是眾多技術(shù)的應(yīng)用合體,包括網(wǎng)絡(luò)編程、移動(dòng)開發(fā)、后端開發(fā)、高并發(fā)、高可用、高安全等技術(shù)范疇,再加上多端使用不同的編程語言,想要湊齊一個(gè)典型的IM產(chǎn)品技術(shù)棧那也不是個(gè)容易事。
本系列文章將盡量從理論概念入手,通俗易懂的梳理IM中的基礎(chǔ)技術(shù)概念和熱門技術(shù)點(diǎn),希望能幫你理清看似一團(tuán)亂麻的IM知識(shí)體系,幫助您了解。

快速了解一個(gè)主流IM系統(tǒng)的應(yīng)用場(chǎng)景、技術(shù)特點(diǎn)和功能組成,快速建立對(duì)IM系統(tǒng)的主觀認(rèn)知。
IM的應(yīng)用場(chǎng)景
IM其實(shí)并不局限于聊天、社交這類“典型”應(yīng)用中,實(shí)際上它已經(jīng)廣泛運(yùn)用于我們身邊形形色色的軟件中。
聊天、直播、在線客服、物聯(lián)網(wǎng)等所有需要實(shí)時(shí)互動(dòng)、高實(shí)時(shí)性的場(chǎng)景等等,都需要應(yīng)用到IM技術(shù)。
下面這些場(chǎng)景是我們大家都熟悉的,都用到了IM技術(shù):
1:微信、qq、釘釘?shù)戎髁鱅M應(yīng)用:這是IM技術(shù)的典型應(yīng)用場(chǎng)景;
2:微博、知乎等社區(qū)應(yīng)用:它們利用IM技術(shù)實(shí)現(xiàn)了用戶私信等點(diǎn)對(duì)點(diǎn)聊天;
3:抖音、快手等直播/短視頻應(yīng)用:它們利用IM技術(shù)實(shí)現(xiàn)了與主播的實(shí)時(shí)互動(dòng);
4:米家等智能家居物聯(lián)網(wǎng)應(yīng)用:利用IM技術(shù)實(shí)現(xiàn)實(shí)時(shí)控制、遠(yuǎn)程監(jiān)控等;
5:滴滴、Uber等共享家通類應(yīng)用:利用IM技術(shù)實(shí)現(xiàn)位置共享;
6:在線教育類應(yīng)用:利用IM技術(shù)實(shí)現(xiàn)在線白板。
IM技術(shù)的特點(diǎn)
IM技術(shù)的特點(diǎn)主要就是以下4點(diǎn):
1:實(shí)時(shí)性
對(duì)于IM系統(tǒng),“實(shí)時(shí)”二字是精髓,也是這項(xiàng)技術(shù)存在關(guān)鍵意義所在。它保證的是消息的實(shí)時(shí)觸達(dá)。
舉個(gè)例子:如果跟你的好友微信或qq聊天,我發(fā)的消息他不能即時(shí)收到,或者他發(fā)的信息你也不知道什么時(shí)候能收到,這基本上也就沒法聊下去了,干嗎不痛快打個(gè)電話呢。
2:可靠性
保證消息的不丟失和不重復(fù),是IM系統(tǒng)的另一個(gè)關(guān)鍵技術(shù)特點(diǎn)。試想,當(dāng)你在用qq或微信跟女朋友聊天,好不容易鼓起勇氣向“她”表白,結(jié)果這消息要是丟包了,那肯定得卸載應(yīng)用了,搞不好砸手機(jī)都有可能。當(dāng)然,好話不說二遍,消息重復(fù)也同樣惱人。
3:一致性
對(duì)于單聊消息而言,保證同一個(gè)設(shè)備的時(shí)間順序、不同設(shè)備的漫游同步,也是相當(dāng)重要的一環(huán)。
IM系統(tǒng)中的消息交互,就到底就是人跟人在“說話”,前言不搭理后言、或者胡言亂語式的消息展現(xiàn),那不是人瘋了就是程序瘋了,總之就是沒法再聊下去了。
4:安全性
保證數(shù)據(jù)傳輸安全、數(shù)據(jù)存儲(chǔ)安全、消息內(nèi)容安全,也是IM系統(tǒng)必不可少的特性。尤其在私聊場(chǎng)景下,如果不能做到安全性,聊天的體驗(yàn)跟被人偷窺的感覺是沒有區(qū)別的。
IM的功能組成
1:聯(lián)系人列表
這個(gè)很好理解,使用IM系統(tǒng)的第一步,就是要解決“跟誰聊”的問題。從功能表象上來說,聯(lián)系人列表也就是社交關(guān)系列表,無非就是個(gè)信息列表界面,有什么特殊的地方?
聯(lián)系人列表看似簡(jiǎn)單,實(shí)際上它是一系列IM系統(tǒng)的社交關(guān)系確立動(dòng)作的結(jié)果體現(xiàn)。
總的來說,聯(lián)系人列表的建立,是一個(gè)IM系統(tǒng)聊天關(guān)系確立的表現(xiàn),不可或缺。
2:聊天界面
聊天界面看似很平常,實(shí)際它就是IM系統(tǒng)客戶端的核心功能所在,所有主要的IM功能都是通過它展現(xiàn)。
它應(yīng)該具備的能力有:
1:各種聊天功能按鈕:語音留言、圖片、文字、表情、文件、實(shí)時(shí)電話、實(shí)時(shí)視頻等;
2:各種聊天消息顯示:各種消息都有不同的UI顯示元素和處理邏輯;
3:流暢的使用體驗(yàn):大量不同類型的消息顯示時(shí),不能卡頓;
4:即時(shí)顯示聊天消息:網(wǎng)絡(luò)線程收到的消息,要馬上在UI上顯示出來;
5:歷史消息的加載:上次聊過的內(nèi)容也得顯示出來吧。
以上只是簡(jiǎn)單羅列,這看似簡(jiǎn)單的聊天界面,能把上面列表的事情做好,工作量也不小吧。
消息存儲(chǔ)
消息存儲(chǔ)這個(gè)功能好理解,聊天的消息如果存儲(chǔ),下次再聊的時(shí)候就不知道之前聊過什么,做不到這一點(diǎn),這個(gè)IM系統(tǒng)的聊天體驗(yàn)好不起來。
那么,哪些情況下需要進(jìn)行消息存儲(chǔ)呢:
1:對(duì)方不在線時(shí):聊天消息應(yīng)該存儲(chǔ),這叫離線消息存儲(chǔ)。
2:對(duì)方在線時(shí):聊天消息也要存到本地存儲(chǔ),這叫消息緩存)。
3:對(duì)方在線或不在線時(shí):聊天消息都要存到服務(wù)端,用于實(shí)現(xiàn)多設(shè)備的消息漫游和同步。
IM系統(tǒng)的應(yīng)用場(chǎng)景已經(jīng)不單單是IM聊天應(yīng)用這一種形態(tài),它已經(jīng)融入到互聯(lián)網(wǎng)應(yīng)用的方方面面,必竟誰都想自已的應(yīng)用具備“實(shí)時(shí)”交互這種能力,因?yàn)轶w驗(yàn)太好了。
IM系統(tǒng)典型架構(gòu)無非就是網(wǎng)絡(luò)接入層、業(yè)務(wù)邏輯層、數(shù)據(jù)存儲(chǔ)層,除開網(wǎng)絡(luò)接入層,其它各層其實(shí)跟普通的應(yīng)用系統(tǒng)看起來差別并不是太大。
IM系統(tǒng)的技術(shù)特點(diǎn)來說,就是實(shí)時(shí)性、可靠性、一致性、安全性,除了實(shí)時(shí)性對(duì)于多數(shù)應(yīng)用來說并不關(guān)心,其它的指標(biāo)也很好理解。