<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Jack Jiang

    我的最新工程MobileIMSDK:http://git.oschina.net/jackjiang/MobileIMSDK
    posts - 494, comments - 13, trackbacks - 0, articles - 1

    本文在編寫時參考了博客作者“鹿呦呦”和在線課程“即時消息技術剖析與實戰”的相關資料,一并表示感謝。

    1、系列文章引言

    IM系統看似簡單(沒錯,很多土老板認為開發個qq和微信也就是幾萬塊錢的事... ),實責是眾多技術的應用合體,包括網絡編程、移動開發、后端開發、高并發、高可用、高安全等技術范疇,再加上多端使用不同的編程語言,想要湊齊一個典型的IM產品技術棧那也不是個容易事。

    而對于IM開發入門者來說,想要在眾多的IM技術術語和概念中找到學習的方向和需要的資料,那也是件很讓人抓狂的事。如果看到不該看的技術深水區文章,直接從入門到放棄——被活活嚇退,那也是相當悲劇的。

    本系列文章將盡量從理論概念入手,通俗易懂的梳理IM中的基礎技術概念和熱門技術點,希望能幫你理清看似一團亂麻的IM知識體系,助你找到清晰的IM技術學習方向,來日工資翻倍、迎娶白富美也未必不可能!

     

    友情提示:本系列文章側重于理論概念的講述,篇幅有限,點到即止,如需系統、深入、具體地學習IM技術的方方面面,請從此文入手:《新手入門一篇就夠:從零開發移動端IM》(史詩級文章,適合從入門到放棄)。

    學習交流:

    - 即時通訊/推送技術開發交流5群:215477170[推薦]

    - 移動端IM開發入門文章:《新手入門一篇就夠:從零開發移動端IM

    2、系列文章目錄

    IM開發快速入門(一):什么是IM系統?》(* 本文

    《IM開發快速入門(二):什么是IM系統的實時性? (稍后發布)》

    《IM開發快速入門(三):什么是IM系統的可靠性? (稍后發布)》

    《IM開發快速入門(四):什么是IM系統的一致性? (稍后發布)》

    《IM開發快速入門(五):什么是IM系統的安全性? (稍后發布)》

    《IM開發快速入門(六):什么是IM系統的的心跳機制? (稍后發布)》

    《IM開發快速入門(七):如何理解并實現IM系統消息未讀數? (稍后發布)》

    《IM開發快速入門(八):如何理解并實現IM系統的多端消息漫游? (稍后發布)》

    3、本文內容概述

    本文將帶你快速了解一個主流IM系統的應用場景、典型架構、技術特點和功能組成,幫你快速建立對IM系統的主觀認知。

    如果你不想從技術的角度理解IM原理,可以嘗試閱讀此文:《知識科普:IM聊天應用是如何將消息發送給對方的?(非技術篇)》。

    本文已收入即時通訊網的入門綱領性文章《新手入門一篇就夠:從零開發移動端IM》。

    本文已同步發布于“即時通訊技術圈”公眾號,歡迎關注:

    ▲ 本文在公眾號上的鏈接是:https://mp.weixin.qq.com/s/h7L4UGHRl7qI1bi8WyZ5iw,原文鏈接是:http://www.52im.net/thread-3065-1-1.html

    4、IM的應用場景

    IM其實并不局限于聊天、社交這類“典型”應用中,實際上它已經廣泛運用于我們身邊形形色色的軟件中。

    聊天、直播、在線客服、物聯網等所有需要實時互動、高實時性的場景等等,都需要應用到 IM 技術。

    下面這些場景是我們大家都熟悉的,都用到了IM技術:

    • 1)微信、qq、釘釘等主流IM應用:這是IM技術的典型應用場景;
    • 2)微博、知乎等社區應用:它們利用IM技術實現了用戶私信等點對點聊天;
    • 3)抖音、快手等直播/短視頻應用:它們利用IM技術實現了與主播的實時互動;
    • 4)米家等智能家居物聯網應用:利用IM技術實現實時控制、遠程監控等;
    • 5)滴滴、Uber等共享家通類應用:利用IM技術實現位置共享;
    • 6)在線教育類應用:利用IM技術實現在線白板。 

    5、IM的典型架構

    一個典型的IM架構類似于下圖這樣:

    本圖引用自《即時消息技術剖析與實戰》學習筆記1——IM系統的架構》一文

    如上圖所示,IM架構中的各分層職責如下:

    • 1)客戶端:作為與服務端進行消息收發通信的終端;
    • 2)接入層:也叫網關層,為客戶端收發消息提供入口;
    • 3)邏輯層:負責IM系統各功能的核心邏輯實現;
    • 4)存儲層:負責IM系統相關數據的持久化存儲,包括消息內容、賬號信息、社交關系鏈等;
    • 5)第三方服務:保證APP在未打開或后臺運行時也能收到消息通知(這主要是第第3方消息推送服務)。

    尤其對于“接入層”,它的職責最為關鍵,具體是:

    • 1)保持海量用戶連接;
    • 2)解析協議,對傳輸內容進行編解碼;
    • 3)維護客戶端的連接(也叫“Session”);
    • 4)推送消息。

    以下文章適合IM架構設計入門,有興趣可以讀一讀:

    6、IM技術的特點

    IM技術的特點主要就是以下4點: 

    ▶ 1)實時性:

    對于IM系統,“實時”二字是精髓,也是這項技術存在關鍵意義所在。它保證的是消息的實時觸達。

    舉個例子:如果跟你的好友微信或qq聊天,我發的消息他不能即時收到,或者他發的信息你也不知道什么時候能收到,這基本上也就沒法聊下去了(干嗎不痛快打個電話呢)。

    ▶ 2)可靠性:

    保證消息的不丟失和不重復,是IM系統的另一個關鍵技術特點。試想,當你在用qq或微信跟女朋友聊天,好不容易鼓起勇氣向“她”表白,結果這消息要是丟包了,那肯定得卸載應用了,搞不好砸手機都有可能。當然,好話不說二遍,消息重復也同樣惱人。

    以下文章對消息的不丟/不重問題進行了深入探討,有興趣可以詳讀:

    ▶ 3)一致性:

    對于單聊消息而言,保證同一個設備的時間順序、不同設備的漫游同步,也是相當重要的一環。

    IM系統中的消息交互,就到底就是人跟人在“說話”,前言不搭理后言、或者胡言亂語式的消息展現,那不是人瘋了就是程序瘋了,總之就是沒法再聊下去了。

    以下文章對消息時序問題進行了深入探討,有興趣可以詳讀:

    ▶ 4)安全性:

    保證數據傳輸安全、數據存儲安全、消息內容安全,也是IM系統必不可少的特性。尤其在私聊場景下,如果不能做到安全性,聊天的體驗跟被人偷窺的感覺是沒有區別的。

    以下文章對IM的安全問題進行了深入探討,有興趣可以詳讀:

    7、IM的功能組成

    淺顯的角度講,一個典型的IM功能組成,無非就是以下5樣:

    • 1)聯系人列表;
    • 2)聊天界面;
    • 3)消息發送通道;
    • 4)消息接收通道;
    • 5)消息存儲;
    • 6)消息未讀數。

    我們一樣一樣來說說各自的用途。

    ▶ 1)聯系人列表:

    這個很好理解,使用IM系統的第一步,就是要解決“跟誰聊”的問題。從功能表象上來說,聯系人列表也就是社交關系列表,無非就是個信息列表界面,有什么特殊的地方?

    聯系人列表看似簡單,實際上它是一系列IM系統的社交關系確立動作的結果體現。

    要想建立聯系人列表,你可能需要實現以下邏輯:

    • 1)怎么能找到想要聊天的人?(需要實現隨機查找?精確查找?)
    • 2)怎么決定要不要跟這個人聊?(需要實現對方的個人信息查看)
    • 3)開始發出好友請求;
    • 4)被請求的一方,還可以決定是“同意”還是“拒絕”(“同意”該怎么處理?“拒絕”又該怎么處理?)。

    總的來說,聯系人列表的建立,是一個IM系統聊天關系確立的表現,不可或缺。

    ▶ 2)聊天界面: 

    聊天界面看似很平常,實際它就是IM系統客戶端的核心功能所在,所有主要的IM功能都是通過它展現。

    它應該具備的能力有:

    • 1)各種聊天功能按鈕:語音留言、圖片、文字、表情、文件、實時電話、實時視頻等;
    • 2)各種聊天消息顯示:各種消息都有不同的UI顯示元素和處理邏輯;
    • 3)流暢的使用體驗:大量不同類型的消息顯示時,不能卡頓;
    • 4)即時顯示聊天消息:網絡線程收到的消息,要馬上在UI上顯示出來;
    • 5)歷史消息的加載:上次聊過的內容也得顯示出來吧。

    以上只是簡單羅列,這看似簡單的聊天界面,能把上面列表的事情做好,工作量也不小吧。

    ▶ 3)消息發送通道:

    下圖是一個典型的IM消息收發通道示意: 

    如上圖所示,消息發送通道這個比較好懂,最淺顯易懂的理解就是用tcp或udp,建立socket長連接,需要發消息的時候,wirte一下就過去了,好簡單!

    但,事情往往不是想象的這么簡單:

    • 1)如何保證這條socket長連接時一直處于可用的狀態?
    • 2)當socket長連接不可用時,用戶此時發送的消息該怎么處理?
    • 3)怎么保證發送的消息不丟?
    • 4)怎么保證發送的消息不復重?
    • 5)怎么保證發送的消息亂序?
    • 6)當對方不在線時,發送的消息去哪了?
    • 7)發送的消息,能保證實時送到?

    這么一說,事情還挺多(那不廢話嗎。。。)。

    ▶ 4)消息接收通道:

    正如上節中的消息收發通道示意圖所示,消息接收通道也很好理解,對方通過消息發送通道write的消息,我得收到并顯示啊。

    要實現一個可靠的消息接收通道,也并非易事:

    • 1)如何保證socket長連接通道能隨時處于良好的邊接狀態(隨時接收對方write的消息);
    • 2)當socket長連接斷開時,對方發送消息該怎么實現?
    • 3)當socket恢復連接時,怎么恢復之前的聊天現場?
    • 4)當我收到對方的消息時,對方怎么知道我已經收到了?
    • 5)當重復收到對方的消息時,該怎么處理?
    • 6)當收到的消息時序有錯亂,該怎么處理?

    ▶ 5)消息存儲:

    消息存儲這個功能好理解,聊天的消息如果存儲,下次再聊的時候就不知道之前聊過什么,做不到這一點,這個IM系統的聊天體驗好不起來。

    那么,哪些情況下需要進行消息存儲呢:

    • 1)對方不在線時:聊天消息應該存儲(這叫離線消息存儲);
    • 2)對方在線時:聊天消息也要存到本地存儲(這叫消息緩存);
    • 3)對方在線或不在線時:聊天消息都要存到服務端(用于實現多設備的消息漫游和同步)。

    具體要存儲的內容和時機也就上面這幾樣。

    但技術落到實處,要做的事情同樣少不了:

    • 1)離線消息該怎么多久?
    • 2)圖片、短視頻、大文件這類的離線消息,多媒體文件該怎么存(有可能量會很大)?
    • 3)當本地的消息積累太多時,怎么能保證本地存儲的性能?
    • 4)當應用更新、升級或異常時,怎么能保證本地存儲的完整性(不被破壞)?
    • 5)怎么能保證多設備消息能不丟、不重、不亂?

    這么多需要考慮的內容,也挺讓人抓狂。

    下圖是一個IM系統的典型存儲架構設計,了解一下:

    本圖引用自《現代IM系統中聊天消息的同步和存儲方案探討》一文

    存儲是IM系統的基石,以下文章可以深入閱讀:

    ▶ 6)消息未讀數:

    消息未讀數?看起來也就是那個所有IM應用都有的未讀小紅點嘛。是的,看起來也好簡單!

    然而,消息未讀數功能的實現也一樣不簡單:

    • 1)未讀數是客戶端實現還是服務端實現?
    • 2)會話未讀和總未讀怎么保持一致?
    • 3)多終端情況下,怎么保證未讀數的一致性(我在這臺設備上讀沒讀,那臺設備怎么知道的?)?

    是的,看起來就這么簡簡單單的3件事,但深入思考一下,還真的簡單不起來。

    8、本文小結

    IM系統的應用場景已經不單單是IM聊天應用這一種形態,它已經融入到互聯網應用的方方面面,必竟誰都想自已的應用具備“實時”交互這種能力,因為體驗太好了。

    IM系統典型架構無非就是網絡接入層、業務邏輯層、數據存儲層,除開網絡接入層,其它各層其實跟普通的應用系統看起來差別并不是太大。

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

    IM系統的功能組成上,聯系人列表用于數據模型的建立、聊天界面承載了IM系統的終端展現、消息的收發通道用于實現“實時”這個特性、存儲和未讀數看似不是必須但用戶體驗上確必不可少。

    附錄:更多IM開發資料匯總

    [1] 有關IM架構設計的文章:

    淺談IM系統的架構設計

    簡述移動端IM開發的那些坑:架構設計、通信協議和客戶端

    一套海量在線用戶的移動端IM架構設計實踐分享(含詳細圖文)

    一套原創分布式即時通訊(IM)系統理論架構方案

    從零到卓越:京東客服即時通訊系統的技術架構演進歷程

    蘑菇街即時通訊/IM服務器開發之架構選擇

    騰訊QQ1.4億在線用戶的技術挑戰和架構演進之路PPT

    微信后臺基于時間序的海量數據冷熱分級架構設計實踐

    微信技術總監談架構:微信之道——大道至簡(演講全文)

    如何解讀《微信技術總監談架構:微信之道——大道至簡》

    快速裂變:見證微信強大后臺架構從0到1的演進歷程(一)

    17年的實踐:騰訊海量產品的技術方法論

    移動端IM中大規模群消息的推送如何保證效率、實時性?

    現代IM系統中聊天消息的同步和存儲方案探討

    WhatsApp技術實踐分享:32人工程團隊創造的技術神話

    微信朋友圈千億訪問量背后的技術挑戰和實踐總結

    王者榮耀2億用戶量的背后:產品定位、技術架構、網絡方案等

    IM系統的MQ消息中間件選型:Kafka還是RabbitMQ?

    騰訊資深架構師干貨總結:一文讀懂大型分布式系統設計的方方面面

    以微博類應用場景為例,總結海量社交系統的架構設計步驟

    快速理解高性能HTTP服務端的負載均衡技術原理

    子彈短信光鮮的背后:網易云信首席架構師分享億級IM平臺的技術實踐

    IM開發基礎知識補課(五):通俗易懂,正確理解并用好MQ消息隊列

    微信技術分享:微信的海量IM聊天消息序列號生成實踐(算法原理篇)

    微信技術分享:微信的海量IM聊天消息序列號生成實踐(容災方案篇)

    新手入門:零基礎理解大型分布式架構的演進歷史、技術原理、最佳實踐

    一套高可用、易伸縮、高并發的IM群聊、單聊架構方案設計實踐

    社交軟件紅包技術解密(一):全面解密QQ紅包技術方案——架構、技術實現等

    社交軟件紅包技術解密(二):解密微信搖一搖紅包從0到1的技術演進

    社交軟件紅包技術解密(三):微信搖一搖紅包雨背后的技術細節

    社交軟件紅包技術解密(四):微信紅包系統是如何應對高并發的

    社交軟件紅包技術解密(五):微信紅包系統是如何實現高可用性的

    社交軟件紅包技術解密(六):微信紅包系統的存儲層架構演進實踐

    社交軟件紅包技術解密(七):支付寶紅包的海量高并發技術實踐

    社交軟件紅包技術解密(八):全面解密微博紅包技術方案

    社交軟件紅包技術解密(九):談談手Q紅包的功能邏輯、容災、運維、架構等

    社交軟件紅包技術解密(十):手Q客戶端針對2020年春節紅包的技術實踐

    從游擊隊到正規軍(一):馬蜂窩旅游網的IM系統架構演進之路

    從游擊隊到正規軍(二):馬蜂窩旅游網的IM客戶端架構演進和實踐總結

    IM開發基礎知識補課(六):數據庫用NoSQL還是SQL?讀這篇就夠了!

    瓜子IM智能客服系統的數據架構設計(整理自現場演講,有配套PPT)

    阿里釘釘技術分享:企業級IM王者——釘釘在后端架構上的過人之處

    從游擊隊到正規軍(三):基于Go的馬蜂窩旅游網分布式IM系統技術實踐

    微信后臺基于時間序的新一代海量數據存儲架構的設計實踐

    IM開發基礎知識補課(九):想開發IM集群?先搞懂什么是RPC!

    >> 更多同類文章 ……

    [2] IM開發熱門綜合文章:

    新手入門一篇就夠:從零開發移動端IM

    移動端IM開發者必讀(一):通俗易懂,理解移動網絡的“弱”和“慢”

    移動端IM開發者必讀(二):史上最全移動弱網絡優化方法總結

    從客戶端的角度來談談移動端IM的消息可靠性和送達機制

    IM開發基礎知識補課:正確理解前置HTTP SSO單點登錄接口的原理

    移動端IM中大規模群消息的推送如何保證效率、實時性?

    移動端IM開發需要面對的技術問題

    開發IM是自己設計協議用字節流好還是字符流好?

    請問有人知道語音留言聊天的主流實現方式嗎?

    IM消息送達保證機制實現(一):保證在線實時消息的可靠投遞

    IM消息送達保證機制實現(二):保證離線消息的可靠投遞

    如何保證IM實時消息的“時序性”與“一致性”?

    一個低成本確保IM消息時序的方法探討

    IM單聊和群聊中的在線狀態同步應該用“推”還是“拉”?

    IM群聊消息如此復雜,如何保證不丟不重?

    談談移動端 IM 開發中登錄請求的優化

    移動端IM登錄時拉取數據如何作到省流量?

    淺談移動端IM的多點登錄和消息漫游原理

    完全自已開發的IM該如何設計“失敗重試”機制?

    通俗易懂:基于集群的移動端IM接入層負載均衡方案分享

    微信對網絡影響的技術試驗及分析(論文全文)

    即時通訊系統的原理、技術和應用(技術論文)

    開源IM工程“蘑菇街TeamTalk”的現狀:一場有始無終的開源秀

    如約而至:微信自用的移動端IM網絡層跨平臺組件庫Mars已正式開源

    全面掌握移動端主流圖片格式的特點、性能、調優等

    子彈短信光鮮的背后:網易云信首席架構師分享億級IM平臺的技術實踐

    IM開發基礎知識補課(五):通俗易懂,正確理解并用好MQ消息隊列

    微信技術分享:微信的海量IM聊天消息序列號生成實踐(算法原理篇)

    自已開發IM有那么難嗎?手把手教你自擼一個Andriod版簡易IM (有源碼)

    融云技術分享:解密融云IM產品的聊天消息ID生成策略

    IM開發基礎知識補課(六):數據庫用NoSQL還是SQL?讀這篇就夠了!

    適合新手:從零開發一個IM服務端(基于Netty,有完整源碼)

    拿起鍵盤就是干:跟我一起徒手開發一套分布式IM系統

    適合新手:手把手教你用Go快速搭建高性能、可擴展的IM系統(有源碼)

    IM里“附近的人”功能實現原理是什么?如何高效率地實現它?

    IM要做手機掃碼登錄?先看看微信的掃碼登錄功能技術原理

    IM消息ID技術專題(一):微信的海量IM聊天消息序列號生成實踐(算法原理篇)

    IM消息ID技術專題(二):微信的海量IM聊天消息序列號生成實踐(容災方案篇)

    IM消息ID技術專題(三):解密融云IM產品的聊天消息ID生成策略

    IM消息ID技術專題(四):深度解密美團的分布式ID生成算法

    IM消息ID技術專題(五):開源分布式ID生成器UidGenerator的技術實現

    IM開發寶典:史上最全,微信各種功能參數和邏輯規則資料匯總

    IM開發干貨分享:我是如何解決大量離線消息導致客戶端卡頓的

    IM開發快速入門(一):什么是IM系統?

    >> 更多同類文章 ……

    (本文同步發布于:http://www.52im.net/thread-3065-1-1.html



    作者:Jack Jiang (點擊作者姓名進入Github)
    出處:http://www.52im.net/space-uid-1.html
    交流:歡迎加入即時通訊開發交流群 215891622
    討論:http://www.52im.net/
    Jack Jiang同時是【原創Java Swing外觀工程BeautyEye】【輕量級移動端即時通訊框架MobileIMSDK】的作者,可前往下載交流。
    本博文 歡迎轉載,轉載請注明出處(也可前往 我的52im.net 找到我)。


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    Jack Jiang的 Mail: jb2011@163.com, 聯系QQ: 413980957, 微信: hellojackjiang
    主站蜘蛛池模板: 亚洲精品在线不卡| 国产精品久久亚洲不卡动漫| 99在线免费观看视频| 性xxxx黑人与亚洲| 亚洲熟伦熟女新五十路熟妇| 99久久免费看国产精品| 久久精品国产亚洲AV| 亚洲欧洲国产精品香蕉网| 成人免费午夜无码视频| 一级做a爰性色毛片免费| 国产黄色一级毛片亚洲黄片大全| 亚洲国产成人99精品激情在线| 三年片在线观看免费观看高清电影 | 亚洲91精品麻豆国产系列在线| 免费福利在线播放| 国产精品高清视亚洲精品| 最近免费中文字幕4| 亚洲国产午夜精品理论片在线播放| 夜夜嘿视频免费看| 精品特级一级毛片免费观看| 亚洲精品麻豆av| 一区二区免费视频| 亚洲色欲色欲www| 免费国产成人午夜私人影视 | 亚洲一区免费视频| 日韩中文字幕免费| 人成午夜免费大片在线观看| 亚洲AV永久无码区成人网站| 99久久国产热无码精品免费| 亚洲av纯肉无码精品动漫| 中文亚洲成a人片在线观看| 毛片在线播放免费观看| 日韩亚洲国产综合高清| 亚洲成a人在线看天堂无码| 搡女人免费免费视频观看| 亚洲中文无码线在线观看| 国产高清在线精品免费软件 | 羞羞视频在线观看免费| 久久精品7亚洲午夜a| 天天天欲色欲色WWW免费| 91在线视频免费观看|