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系統的技術特點來說,就是實時性、可靠性、一致性、安全性,除了實時性對于多數應用來說并不關心,其它的指標也很好理解。