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

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