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

一、前言
IM發(fā)展至今,已是非常重要的互聯(lián)網(wǎng)應(yīng)用形態(tài)之一,尤其移動互聯(lián)網(wǎng)時代,它正以無與論比的優(yōu)勢降低了溝通成本和交流門檻,對各種應(yīng)用形態(tài)產(chǎn)生了深遠(yuǎn)影響。
做為IM開發(fā)者或即將成為IM開發(fā)者的技術(shù)人員,IM的價值和重要性不言自明。但從技術(shù)實現(xiàn)來說,IM系統(tǒng)的開發(fā)(尤其是移動端IM)還是存在許多技術(shù)難點(diǎn)和坑點(diǎn)的。也正因如此,優(yōu)質(zhì)的IM開發(fā)資料、實踐成果,對于沒有太多技術(shù)儲備的新手來說,尤其難以獲得。
本文將以新手的視角引導(dǎo)你閱讀相關(guān)文章,便于你從零開發(fā)一個移動端IM做好方方面面的知識準(zhǔn)備:包括但不限于網(wǎng)絡(luò)編程基礎(chǔ)、通信協(xié)議的選型、IM的架構(gòu)設(shè)計等等。文筆有限,如有不妥之處還請批評指正,希望對你有用。
* 閱讀對象:本文適合想從技術(shù)維度系統(tǒng)學(xué)習(xí)IM技術(shù)并著手自已開發(fā)(即解決“IM系統(tǒng)要怎么做?”這個疑問)的技術(shù)人員閱讀。如果你是產(chǎn)品經(jīng)理或技術(shù)小白,只是想知道“IM系統(tǒng)是什么?”,不想深入探討具體的技術(shù)實現(xiàn),可以閱讀:《零基礎(chǔ)IM開發(fā)入門》系列文章。
另外:如果你是老司機(jī),或覺得本文內(nèi)容過于龐大,可自行前往即時通訊網(wǎng)收納整理的技術(shù)專輯,選擇性地閱讀:點(diǎn)擊進(jìn)入技術(shù)分類和專輯。
* 特別推薦:建議讀完本文后,繼續(xù)閱讀本站的幾篇實戰(zhàn)性即時通訊入門文章《自已開發(fā)IM有那么難嗎?手把手教你自擼一個Andriod版簡易IM (有源碼)》、《適合新手:從零開發(fā)一個IM服務(wù)端(基于Netty,有完整源碼)》、《拿起鍵盤就是干:跟我一起徒手開發(fā)一套分布式IM系統(tǒng)》,效果更好。
* 最新修改1:2020年05月18日,新增加了“《IM開發(fā)寶典:史上最全,微信各種功能參數(shù)和邏輯規(guī)則資料匯總》”鏈接。
* 最新修改2:2020年08月03日,新增加了“《Web端即時通訊實踐干貨:如何讓你的WebSocket斷網(wǎng)重連更快速?》”鏈接。
* 最新修改3:2020年08月10日,新增加了“《腦殘式網(wǎng)絡(luò)編程入門(九):面試必考,史上最通俗大小端字節(jié)序詳解》”鏈接。
* 最新修改4:2020年08月31日,新增加了“《IM消息ID技術(shù)專題(六):深度解密滴滴的高性能ID生成器(Tinyid)》”鏈接。
* 最新修改5:2021年03月22日,新增加了“《一套億級用戶的IM架構(gòu)技術(shù)干貨》”鏈接。
* 最新修改6:2021年04月05日,新增加了“《從新手到專家:如何設(shè)計一套億級消息量的分布式IM系統(tǒng)》”鏈接。
* 最新修改7:2021年07月12日,新增加了“《喜馬拉雅億級用戶量的離線消息推送系統(tǒng)架構(gòu)設(shè)計實踐》”鏈接。
* 最新修改8:2021年07月19日,新增加了“《企業(yè)微信的IM架構(gòu)設(shè)計揭秘:消息模型、萬人群、已讀回執(zhí)、消息撤回等》”鏈接。
* 最新修改9:2021年07月26日,新增加了“《融云技術(shù)分享:全面揭秘億級IM消息的可靠投遞機(jī)制》”鏈接。
二、讀完本文的收獲
2.1您將獲得
本文將假設(shè)你是毫無技術(shù)準(zhǔn)備的新手,引導(dǎo)你通過一篇篇精選的文章,了解如何從零開發(fā)一個移動端IM所需要的各種技術(shù)、資料和實踐性代碼。
2.2您無法獲得
鑒于IM技術(shù)的復(fù)雜性,IM開發(fā)相關(guān)的技術(shù)不是一篇文章所能展現(xiàn)的完整,限于篇幅原因本文將不包含任何實踐性代碼、也盡量不對某項技術(shù)作深入的展開,相關(guān)的實踐性代碼、資料、技術(shù)詳解等請依據(jù)本文作者準(zhǔn)備的文章逐個深入閱讀和學(xué)習(xí),而這也恰恰是本文想達(dá)到的目的。
三、題外話
隨著近兩年IM云服務(wù)的發(fā)展,很多團(tuán)隊基于種種原因,直接選擇了短平快的云IM接入App中。然而,考慮到云IM無論從商業(yè)模式還是運(yùn)營模式上,還需經(jīng)過多年的沉淀,才可能真正實現(xiàn)客戶與服務(wù)商的運(yùn)營和服務(wù)良性循環(huán)的雙贏局面。因則,如何選擇云IM服務(wù)商,這就是個頭疼的問題了,不過這不是本文將要討論的重點(diǎn),如果需要,你也可以加入本文提到的討論交流群,與大家一起交流群:215477170。
好了,以下是正文內(nèi)容。
四、網(wǎng)絡(luò)編程理論準(zhǔn)備
即時通訊技術(shù)歸根結(jié)底還是網(wǎng)絡(luò)編程技術(shù)的應(yīng)用,如果您很好奇承載這些網(wǎng)絡(luò)協(xié)議的物理設(shè)備是怎么工作的,可以先看看《網(wǎng)絡(luò)編程懶人入門(六):史上最通俗的集線器、交換機(jī)、路由器功能原理入門》。
4.1UDP、TCP理論基礎(chǔ)
我們都知道,IM系統(tǒng)的業(yè)務(wù)本質(zhì)就是客戶端與客戶端進(jìn)行消息的實時傳遞,而技術(shù)基礎(chǔ)就是基于Socket連接的實時數(shù)據(jù)讀寫,那么基本的網(wǎng)絡(luò)編程理論基礎(chǔ)是作為新手的你必須掌握的知識點(diǎn)。當(dāng)然,作為IM開發(fā)來說,基礎(chǔ)的網(wǎng)絡(luò)理論就夠用了,也沒有必要像網(wǎng)絡(luò)工程師一樣精通所謂的OSI七層參考模型。
如果你還不知道什么是UDP、TCP協(xié)議,請閱讀以下文章:
《TCP/IP詳解?-?第11章·UDP:用戶數(shù)據(jù)報協(xié)議》
《TCP/IP詳解?-?第17章·TCP:傳輸控制協(xié)議》
《TCP/IP詳解?-?第18章·TCP連接的建立與終止》
《TCP/IP詳解?-?第21章·TCP的超時與重傳》
《網(wǎng)絡(luò)編程懶人入門(一):快速理解網(wǎng)絡(luò)通信協(xié)議(上篇)》
《網(wǎng)絡(luò)編程懶人入門(二):快速理解網(wǎng)絡(luò)通信協(xié)議(下篇)》
《網(wǎng)絡(luò)編程懶人入門(三):快速理解TCP協(xié)議一篇就夠》
《網(wǎng)絡(luò)編程懶人入門(四):快速理解TCP和UDP的差異》。
這幾篇文章有助于對UDP、TCP協(xié)議建立基本的認(rèn)識,當(dāng)然如果時間允許,能全書閱讀網(wǎng)絡(luò)編程理論經(jīng)典《TCP/IP詳解 卷1:協(xié)議》則再好不過了。另外,UDP、TCP作為基礎(chǔ)計算機(jī)數(shù)據(jù)傳輸協(xié)議,在其之上衍生了很多應(yīng)用層協(xié)議,相關(guān)的協(xié)議族關(guān)系圖可以在此文中找到:《計算機(jī)網(wǎng)絡(luò)通訊協(xié)議關(guān)系圖(中文珍藏版)》,可作為您日常的備查手冊使用。
4.2深入理解TCP傳輸協(xié)議
透徹理解TCP傳輸協(xié)議的連接和斷開過程非常有助于您日后IM算法的優(yōu)化和實現(xiàn),這個過程被形象的總結(jié)為“3次握手與4次揮手”。
以下文章有助于您深入理解之:
《腦殘式網(wǎng)絡(luò)編程入門(一):跟著動畫來學(xué)TCP三次握手和四次揮手》
《腦殘式網(wǎng)絡(luò)編程入門(二):我們在讀寫Socket時,究竟在讀寫什么?》
《理論經(jīng)典:TCP協(xié)議的3次握手與4次揮手過程詳解》
《理論聯(lián)系實際:Wireshark抓包分析TCP 3次握手、4次揮手過程》
《通俗易懂-深入理解TCP協(xié)議(上):理論基礎(chǔ)》
《通俗易懂-深入理解TCP協(xié)議(下):RTT、滑動窗口、擁塞處理》
《網(wǎng)絡(luò)編程懶人入門(八):手把手教你寫基于TCP的Socket長連接》
《不為人知的網(wǎng)絡(luò)編程(一):淺析TCP協(xié)議中的疑難雜癥(上篇)》
《不為人知的網(wǎng)絡(luò)編程(二):淺析TCP協(xié)議中的疑難雜癥(下篇)》
《不為人知的網(wǎng)絡(luò)編程(三):關(guān)閉TCP連接時為什么會TIME_WAIT、CLOSE_WAIT》
《不為人知的網(wǎng)絡(luò)編程(四):深入研究分析TCP的異常關(guān)閉》
《不為人知的網(wǎng)絡(luò)編程(十二):徹底搞懂TCP協(xié)議層的KeepAlive?;顧C(jī)制》
《不為人知的網(wǎng)絡(luò)編程(十三):深入操作系統(tǒng),徹底搞懂127.0.0.1本機(jī)網(wǎng)絡(luò)通信》。
4.3深入理解UDP傳輸協(xié)議
相比TCP協(xié)議,UDP數(shù)據(jù)傳輸協(xié)議就顯得非常輕量和易于理解,UDP通常被用于需要快速響應(yīng)的數(shù)據(jù)傳輸場景下,對應(yīng)于IM中的應(yīng)用形態(tài)有:P2P通信、實時音視頻等。另外,通常的IM都會被應(yīng)用于互聯(lián)網(wǎng)上(而非局域網(wǎng)),那么了解所謂的NAT路由技術(shù)原理等,也將有助于您對P2P打洞、UDP端口老化等概念有一個清楚的認(rèn)知。
以下文章有助于您在接下來開發(fā)IM的實際應(yīng)用中提供一定的實踐依據(jù):
《UDP中一個包的大小最大能多大?》
《NAT詳解:基本原理、穿越技術(shù)(P2P打洞)、端口老化等》
《不為人知的網(wǎng)絡(luò)編程(五):UDP的連接性和負(fù)載均衡》
《不為人知的網(wǎng)絡(luò)編程(六):深入地理解UDP協(xié)議并用好它》。
4.4深入理解基于廣域網(wǎng)的互聯(lián)網(wǎng)編程知識
未來您所編寫的網(wǎng)絡(luò)應(yīng)用程序或產(chǎn)品基本都要運(yùn)行基于廣域網(wǎng)的互聯(lián)網(wǎng)中(而非單純而簡單的局域網(wǎng)),而廣域網(wǎng)因物理網(wǎng)絡(luò)的復(fù)雜性,要編寫能適應(yīng)各種網(wǎng)絡(luò)拓?fù)涞某绦虼a,需要過硬的廣域網(wǎng)絡(luò)基礎(chǔ)知識,比如NAT路由轉(zhuǎn)發(fā)、P2P打洞等等。
下面的文章,有助于您深入理解NAT原理、點(diǎn)對點(diǎn)通信等方面的知識:
《P2P技術(shù)詳解(一):NAT詳解——詳細(xì)原理、P2P簡介》
《P2P技術(shù)詳解(二):P2P中的NAT穿越(打洞)方案詳解(基本原理篇)》
《P2P技術(shù)詳解(三):P2P中的NAT穿越(打洞)方案詳解(進(jìn)階分析篇)》
《P2P技術(shù)詳解(四):P2P技術(shù)之STUN、TURN、ICE詳解》
4.5有關(guān)高性能網(wǎng)絡(luò)編程的知識
實際上,大用戶量高并發(fā)生產(chǎn)環(huán)境下的網(wǎng)絡(luò)編程,你所開發(fā)的產(chǎn)品要想真正堪用并非易事,你很有必要了解高性能網(wǎng)絡(luò)編程領(lǐng)域所關(guān)注的熱點(diǎn)問題和努力的方向。
以下是即時通訊網(wǎng)整理的高性能網(wǎng)絡(luò)編程領(lǐng)域的系列文章:
《高性能網(wǎng)絡(luò)編程(一):單臺服務(wù)器并發(fā)TCP連接數(shù)到底可以有多少》
《高性能網(wǎng)絡(luò)編程(二):上一個10年,著名的C10K并發(fā)連接問題》
《高性能網(wǎng)絡(luò)編程(三):下一個10年,是時候考慮C10M并發(fā)問題了》
好消息是,現(xiàn)時的網(wǎng)絡(luò)編程為了解決高性能問題,有很多成型的Socket應(yīng)用層模式存在,比如:NIO、AIO等,文章《Java新一代網(wǎng)絡(luò)編程模型AIO原理及Linux系統(tǒng)AIO介紹》簡單介紹了傳統(tǒng)的阻塞式IO、NIO,并著重介紹了最新的AIO技術(shù),如有時間您很有必要予以了解。(更多同類文章:點(diǎn)此進(jìn)入…)
4.6深入理解移動互聯(lián)網(wǎng)絡(luò)的特性
移動互聯(lián)網(wǎng)絡(luò)因為無線通信的復(fù)雜性:慢、高延遲、易受干擾、帶寬窄等特點(diǎn),使得與傳統(tǒng)的有線網(wǎng)絡(luò)下的應(yīng)用功能實現(xiàn)有明顯差異,您很有必要詳細(xì)了解一下無線網(wǎng)絡(luò)方面的特性。
以下文章有助于加深您對移動網(wǎng)絡(luò)特性的理解:
《移動端IM開發(fā)者必讀(一):通俗易懂,理解移動網(wǎng)絡(luò)的“弱”和“慢”》
《移動端IM開發(fā)者必讀(二):史上最全移動弱網(wǎng)絡(luò)優(yōu)化方法總結(jié)》
《現(xiàn)代移動端網(wǎng)絡(luò)短連接的優(yōu)化手段總結(jié):請求速度、弱網(wǎng)適應(yīng)、安全保障》
4.7深入學(xué)習(xí)通信技術(shù)物理層(高階知識,選讀!)
如果學(xué)完上述各小節(jié)里推薦的網(wǎng)絡(luò)通信應(yīng)用層知識,還覺得意猶未盡,那么你肯定是萬中無一的人才了——是時候開始《IM開發(fā)者的零基礎(chǔ)通信技術(shù)入門》這個高階知識系列的學(xué)習(xí)了。
以下文章為IM/推送技術(shù)開發(fā)的邊界知識,有助于你從物理層理解各種網(wǎng)絡(luò)問題:
《IM開發(fā)者的零基礎(chǔ)通信技術(shù)入門(一):通信交換技術(shù)的百年發(fā)展史(上)》
《IM開發(fā)者的零基礎(chǔ)通信技術(shù)入門(二):通信交換技術(shù)的百年發(fā)展史(下)》
《IM開發(fā)者的零基礎(chǔ)通信技術(shù)入門(三):國人通信方式的百年變遷》
《IM開發(fā)者的零基礎(chǔ)通信技術(shù)入門(四):手機(jī)的演進(jìn),史上最全移動終端發(fā)展史》
《IM開發(fā)者的零基礎(chǔ)通信技術(shù)入門(五):1G到5G,30年移動通信技術(shù)演進(jìn)史》
《IM開發(fā)者的零基礎(chǔ)通信技術(shù)入門(六):移動終端的接頭人——“基站”技術(shù)》
《IM開發(fā)者的零基礎(chǔ)通信技術(shù)入門(七):移動終端的千里馬——“電磁波”》
《IM開發(fā)者的零基礎(chǔ)通信技術(shù)入門(八):零基礎(chǔ),史上最強(qiáng)“天線”原理掃盲》
《IM開發(fā)者的零基礎(chǔ)通信技術(shù)入門(九):無線通信網(wǎng)絡(luò)的中樞——“核心網(wǎng)”》
《IM開發(fā)者的零基礎(chǔ)通信技術(shù)入門(十):零基礎(chǔ),史上最強(qiáng)5G技術(shù)掃盲》
《IM開發(fā)者的零基礎(chǔ)通信技術(shù)入門(十一):為什么WiFi信號差?一文即懂!》
《IM開發(fā)者的零基礎(chǔ)通信技術(shù)入門(十二):上網(wǎng)卡頓?網(wǎng)絡(luò)掉線?一文即懂!》
《IM開發(fā)者的零基礎(chǔ)通信技術(shù)入門(十三):為什么手機(jī)信號差?一文即懂!》
《IM開發(fā)者的零基礎(chǔ)通信技術(shù)入門(十四):高鐵上無線上網(wǎng)有多難?一文即懂!》
《IM開發(fā)者的零基礎(chǔ)通信技術(shù)入門(十五):理解定位技術(shù),一篇就夠》
五、網(wǎng)絡(luò)編程基礎(chǔ)實踐
如果你認(rèn)真讀完了上一層的文章,是時候?qū)懶┐a,來理論聯(lián)系實際理解Socket通信的原理和實踐了(動手前,再補(bǔ)讀一下《腦殘式網(wǎng)絡(luò)編程入門(九):面試必考,史上最通俗大小端字節(jié)序詳解》)。
有關(guān)TCP的Socket通信Demo文章和代碼:
《網(wǎng)絡(luò)編程懶人入門(八):手把手教你寫基于TCP的Socket長連接》
《Android端與服務(wù)端基于TCP協(xié)議的Socket通訊》
iOS平臺的CocoaAsyncSocket托管代碼中有許多TCP的官方Demo代碼,值得一看。
當(dāng)然,以上只是隨手找的Demo代碼,網(wǎng)絡(luò)上有關(guān)TCP數(shù)據(jù)通信的演示性代碼很容易找到,在此就不過多舉例了。
本文作者專門編寫的有關(guān)跨移動端平臺的UDP Socket通信Demo:
《NIO框架入門(一):服務(wù)端基于Netty4的UDP雙向通信Demo演示》
《NIO框架入門(二):服務(wù)端基于MINA2的UDP雙向通信Demo演示》
《NIO框架入門(三):iOS與MINA2、Netty4的跨平臺UDP雙向通信實戰(zhàn)》
《NIO框架入門(四):Android與MINA2、Netty4的跨平臺UDP雙向通信實戰(zhàn)》。
另外,在用NIO框架MINA和Netty進(jìn)行網(wǎng)絡(luò)編程實踐時,即時查閱最新源碼和API文檔會有很大幫助,以下是即時通訊網(wǎng)獨(dú)家整理的相關(guān)資源。
MINA和Netty框架的最新源碼在線閱讀:
MINA-2.x 源碼在線閱讀:http://docs.52im.net/extend/docs/src/mina2/
MINA-1.x 源碼在線閱讀:http://docs.52im.net/extend/docs/src/mina1/
Netty-4.1.x 源碼在線閱讀:http://docs.52im.net/extend/docs/src/netty4_1/?(推薦)
Netty-4.0.x 源碼在線閱讀:http://docs.52im.net/extend/docs/src/netty4/
Netty-3.x 源碼在線閱讀:http://docs.52im.net/extend/docs/src/netty3/
MINA和Netty框架的最新API文檔在線閱讀:
MINA-2.x API文檔(在線版):http://docs.52im.net/extend/docs/api/mina2/
MINA-1.x API文檔(在線版):http://docs.52im.net/extend/docs/api/mina1/
Netty-4.1.x API文檔(在線版):http://docs.52im.net/extend/docs/api/netty4_1/(推薦)
Netty-4.0.x API文檔(在線版):http://docs.52im.net/extend/docs/api/netty4/
Netty-3.x API文檔(在線版):http://docs.52im.net/extend/docs/api/netty3/
六、IM到底該用UDP還是TCP協(xié)議?
好了,上面的網(wǎng)絡(luò)編程基礎(chǔ)掌握后,就要開始為你的IM進(jìn)行傳輸協(xié)議選型了。說到IM該用UDP還是TCP作為傳輸協(xié)議,這是個頗有爭議的話題,各大社區(qū)每當(dāng)此問題的出現(xiàn)必定是大片的不同聲音。
當(dāng)然,UDP和TCP各有各的應(yīng)用場景,作為IM來說,早期的IM因為服務(wù)端資源(服務(wù)器硬件、網(wǎng)絡(luò)帶寬等)比較昂貴且沒有更好的辦法來分擔(dān)性能負(fù)載,所以很多時候會考慮使用UDP,這其中主要是早期的QQ為代表。
時至今日,TCP的服務(wù)端負(fù)載已經(jīng)有了很好的解決方案,加之服務(wù)器資源成本的下降,目前很多IM、消息推送解決方案也都在使用TCP作為傳輸層協(xié)議。不過,UDP也并未排除在IM、消息推送的解決方案之外,比如:弱網(wǎng)絡(luò)通信(包括跨國的高延遲網(wǎng)絡(luò)環(huán)境)、物聯(lián)網(wǎng)通信、IM中的實時音視頻通信等等場景下,UDP依然是首選項。
以下文章或許有助于您對傳輸層協(xié)議的選型:
《簡述傳輸層協(xié)議TCP和UDP的區(qū)別》
《為什么QQ用的是UDP協(xié)議而不是TCP協(xié)議?》
《移動端即時通訊協(xié)議選擇:UDP還是TCP?》
《網(wǎng)絡(luò)編程懶人入門(五):快速理解為什么說UDP有時比TCP更有優(yōu)勢》
《微信對網(wǎng)絡(luò)影響的技術(shù)試驗及分析(論文全文)》
《為何基于TCP協(xié)議的移動端IM仍然需要心跳?;顧C(jī)制?》。
當(dāng)然,關(guān)于IM到底該選擇UDP還是TCP,這是個仁者見仁智者見智的問題,沒有必要過于糾結(jié),請從您的IM整體應(yīng)用場景、開發(fā)代價、部署和運(yùn)營成本等方面綜合考慮,相信能找到你要的答案。
七、IM的數(shù)據(jù)通信格式選型
IM應(yīng)用開發(fā)的前期技術(shù)選型時,關(guān)于數(shù)據(jù)通信格式的選擇,在同行的眼里,同樣是個極富爭議的話題。
精略分析一下,究其原因,大概在于以下幾點(diǎn):
1)可選擇的協(xié)議或封裝格式多種多樣:
可選擇的余地大:XMPP、Protobuf、JSON、私有2進(jìn)制、MQTT、定格化XML、Plain text等等;2)同一種格式并不能適用于大多數(shù)的場景:
不同場景有同的考慮而協(xié)議的選擇往往跟這掛鉤在一起,如:移動端IM或消息推送的應(yīng)用場景下如用XMPP協(xié)議,多數(shù)情況下都會被噴;3)開發(fā)者對所選格式有各自的偏好:
有的人或團(tuán)隊對某種或某幾種格式有不一樣的經(jīng)驗和技術(shù)積累,也促成了他們對某種或某幾種協(xié)議的偏好。
該選什么樣的數(shù)據(jù)通信格式,同樣是跟你的應(yīng)用場景和使用的架構(gòu)方案相關(guān)聯(lián)。不過,目前以作者掌握的信息看來,作為需要運(yùn)行在移動設(shè)備的IM,幾乎目前所有主流討論里都不建議使用XMPP協(xié)議,具體原因就不在此展開了,下面推薦的文章里會詳細(xì)為你解答原因。
以下文章會對你的IM的數(shù)據(jù)通信格式選型有所幫助:
《如何選擇即時通訊應(yīng)用的數(shù)據(jù)傳輸格式》
《Protobuf通信協(xié)議詳解:代碼演示、詳細(xì)原理介紹等》
《強(qiáng)列建議將Protobuf作為你的即時通訊應(yīng)用數(shù)據(jù)傳輸格式》
《全方位評測:Protobuf性能到底有沒有比JSON快5倍?》
《移動端IM開發(fā)需要面對的技術(shù)問題(含通信協(xié)議選擇)》
《簡述移動端IM開發(fā)的那些坑:架構(gòu)設(shè)計、通信協(xié)議和客戶端》
《理論聯(lián)系實際:一套典型的IM通信協(xié)議設(shè)計詳解》
《58到家實時消息系統(tǒng)的協(xié)議設(shè)計等技術(shù)實踐分享》
《金蝶隨手記團(tuán)隊分享:還在用JSON? Protobuf讓數(shù)據(jù)傳輸更省更快(原理篇)》
《掃盲貼:認(rèn)識MQTT通信協(xié)議》。
(更多同類文章:點(diǎn)此查看…)
八、移動端IM的心跳?;詈秃笈_消息推送
8.1為什么需要心跳?;睿?/h1>
由于移動網(wǎng)絡(luò)的復(fù)雜性,心跳保活對于移動端IM來說顯的尤為重要,加之手機(jī)省電、省流量策略的設(shè)計,如何實現(xiàn)心跳?;顒t也非常重要,文章《基于TCP協(xié)議的移動端IM仍然需要心跳?;顧C(jī)制》或許可以解答你的疑問。
8.2iOS端的后臺消息推送
因為iOS平臺的特殊性,iOS應(yīng)用一旦退到后臺,應(yīng)用本身是無法用代碼來實現(xiàn)網(wǎng)絡(luò)?;畹?,也就無法自行實現(xiàn)后臺消息推送了。
以下文章將有助于你理解iOS平臺的后臺消息推送原理:
《iOS的推送服務(wù)APNs詳解:設(shè)計思路、技術(shù)原理及缺陷等》
《掃盲貼:淺談iOS和Android后臺實時消息推送的原理和區(qū)別》
《了解iOS消息推送一文就夠:史上最全iOS Push技術(shù)詳解》。
8.3Android端的心跳?;詈秃笈_消息推送
鑒于Android平臺眾所周之的分化和互不兼容問題,Android端IM在處理心跳?;詈秃笈_消息推送時,遇到了不少的麻煩。而且,由于Android應(yīng)用的生命周期管理是由系統(tǒng)控制,因而如何保證您的IM所在進(jìn)程或后臺服務(wù)不被系統(tǒng)殺死,是實現(xiàn)心跳?;詈秃笈_消息推送的實現(xiàn)基礎(chǔ)。
以下文章可為你的Android端IM的心跳?;詈秃笈_推送方案的設(shè)計提供參考:
《應(yīng)用?;罱K極總結(jié)(一):Android6.0以下的雙進(jìn)程守護(hù)?;顚嵺`》
《應(yīng)用?;罱K極總結(jié)(二):Android6.0及以上的?;顚嵺`(進(jìn)程防殺篇)》
《應(yīng)用?;罱K極總結(jié)(三):Android6.0及以上的保活實踐(被殺復(fù)活篇)》
《Android進(jìn)程?;钤斀猓阂黄恼陆鉀Q你的所有疑問》
《深入的聊聊Android消息推送這件小事》
《Android端消息推送總結(jié):實現(xiàn)原理、心跳保活、遇到的問題等》
《2020年了,Android后臺?;钸€有戲嗎?看我如何優(yōu)雅的實現(xiàn)!》
《史上最強(qiáng)Android保活思路:深入剖析騰訊TIM的進(jìn)程永生技術(shù)》
《Android進(jìn)程永生技術(shù)終極揭密:進(jìn)程被殺底層原理、App應(yīng)對被殺技巧》
《Android?;顝娜腴T到放棄:乖乖引導(dǎo)用戶加白名單吧(附7大機(jī)型加白示例)》
《為何基于TCP協(xié)議的移動端IM仍然需要心跳保活機(jī)制?》
《微信團(tuán)隊原創(chuàng)分享:Android版微信后臺?;顚崙?zhàn)分享(進(jìn)程保活篇)》
《微信團(tuán)隊原創(chuàng)分享:Android版微信后臺?;顚崙?zhàn)分享(網(wǎng)絡(luò)?;钇?》
《移動端IM實踐:實現(xiàn)Android版微信的智能心跳機(jī)制》
《移動端IM實踐:WhatsApp、Line、微信的心跳策略分析》
(更多同類文章:此進(jìn)入…)
九、移動端IM系統(tǒng)的架構(gòu)設(shè)計
IM其本質(zhì)是一套消息發(fā)送與投遞系統(tǒng),或者說是一套網(wǎng)絡(luò)通信系統(tǒng),歸根結(jié)底就是兩個詞:存儲與轉(zhuǎn)發(fā)。但一個成熟的移動端IM系統(tǒng)要想正常運(yùn)轉(zhuǎn),涉及的內(nèi)容則遠(yuǎn)不止這些,而最考驗技術(shù)功底的就是服務(wù)端架構(gòu)的設(shè)計與實現(xiàn)。
沒有過IM系統(tǒng)開發(fā)經(jīng)驗的人,可能對以上觀點(diǎn)嗤之以鼻,在此借用TeamTalk的設(shè)計者的一段話:“IM服務(wù)器開發(fā),從功能抽象的角度看可能非常簡單,可以認(rèn)為是管理大量的客戶端連接和在不同的客戶端之間傳遞消息,但具體到實現(xiàn)細(xì)節(jié)就比較復(fù)雜了。打個不恰當(dāng)?shù)谋扔鳎琌S的功能抽象也非常簡單,無非是進(jìn)程間的調(diào)度和硬件資源的管理,但要是自己去實現(xiàn)一個,一般人也就只能呵呵了?!?br>
我們以一個典型方案為例,首先來提煉一下一個IM系統(tǒng)的主要需求:包括賬號、關(guān)系鏈、在線狀態(tài)顯示、消息交互(文本、圖片、語音)、實時視頻電話......。
要處理好上述需求,我們通常需要從以下方面進(jìn)行考量從而設(shè)計出合適的架構(gòu):
如果采用可靠傳輸協(xié)議TCP,需要考慮到負(fù)載問題:短連接實現(xiàn)賬號、關(guān)系鏈相關(guān)業(yè)務(wù),長連接實現(xiàn)上線、信息推送;
后臺架構(gòu)的靈活性、可擴(kuò)展性:支持分布式部署——把網(wǎng)絡(luò)層、業(yè)務(wù)邏輯層、數(shù)據(jù)層分離,網(wǎng)絡(luò)層和業(yè)務(wù)層支持負(fù)載均衡策略、數(shù)據(jù)層支持分布式存儲;
客戶端SDK的易用性:把網(wǎng)絡(luò)層、數(shù)據(jù)層分離、業(yè)務(wù)邏輯層分離。
另外,一個典型的IM系統(tǒng)架構(gòu)設(shè)計,還有以下性能方面的熱點(diǎn)問題需要設(shè)計者重點(diǎn)關(guān)注:
編碼角度:采用高效的網(wǎng)絡(luò)模型,線程模型,I/O處理模型,合理的數(shù)據(jù)庫設(shè)計和操作語句的優(yōu)化;
垂直擴(kuò)展:通過提高單服務(wù)器的硬件資源或者網(wǎng)絡(luò)資源來提高性能;
水平擴(kuò)展:通過合理的架構(gòu)設(shè)計和運(yùn)維方面的負(fù)載均衡策略將負(fù)載分擔(dān),有效提高性能;后期甚至可以考慮加入數(shù)據(jù)緩存層,突破IO瓶頸;
系統(tǒng)的高可用性:防止單點(diǎn)故障;
在架構(gòu)設(shè)計時做到業(yè)務(wù)處理和數(shù)據(jù)的分離,從而依賴分布式的部署使得在單點(diǎn)故障時能保證系統(tǒng)可用。
對于關(guān)鍵獨(dú)立節(jié)點(diǎn)可以采用雙機(jī)熱備技術(shù)進(jìn)行切換。
數(shù)據(jù)庫數(shù)據(jù)的安全性可以通過磁盤陣列的冗余配置和主備數(shù)據(jù)庫來解決。
鑒于篇幅有限,架構(gòu)設(shè)計方面的內(nèi)容本文就不深入展開了。
以下文章將為你的移動端IM的架構(gòu)設(shè)計帶來一定的參考意義:
《淺談IM系統(tǒng)的架構(gòu)設(shè)計》
《簡述移動端IM開發(fā)的那些坑:架構(gòu)設(shè)計、通信協(xié)議和客戶端》
《一套海量在線用戶的移動端IM架構(gòu)設(shè)計實踐分享(含詳細(xì)圖文)》
《一套原創(chuàng)分布式即時通訊(IM)系統(tǒng)理論架構(gòu)方案》
《從零到卓越:京東客服即時通訊系統(tǒng)的技術(shù)架構(gòu)演進(jìn)歷程》
《蘑菇街即時通訊/IM服務(wù)器開發(fā)之架構(gòu)選擇》
《騰訊QQ1.4億在線用戶的技術(shù)挑戰(zhàn)和架構(gòu)演進(jìn)之路PPT》
《微信技術(shù)總監(jiān)談架構(gòu):微信之道——大道至簡(演講全文)》
《如何解讀《微信技術(shù)總監(jiān)談架構(gòu):微信之道——大道至簡》》
《快速裂變:見證微信強(qiáng)大后臺架構(gòu)從0到1的演進(jìn)歷程(一)》
《17年的實踐:騰訊海量產(chǎn)品的技術(shù)方法論》
《移動端IM中大規(guī)模群消息的推送如何保證效率、實時性?》
《現(xiàn)代IM系統(tǒng)中聊天消息的同步和存儲方案探討》
《WhatsApp技術(shù)實踐分享:32人工程團(tuán)隊創(chuàng)造的技術(shù)神話》
《微信朋友圈千億訪問量背后的技術(shù)挑戰(zhàn)和實踐總結(jié)》
《王者榮耀2億用戶量的背后:產(chǎn)品定位、技術(shù)架構(gòu)、網(wǎng)絡(luò)方案等》
《騰訊資深架構(gòu)師干貨總結(jié):一文讀懂大型分布式系統(tǒng)設(shè)計的方方面面》
《一套高可用、易伸縮、高并發(fā)的IM群聊、單聊架構(gòu)方案設(shè)計實踐》
《即時通訊新手入門:一文讀懂什么是Nginx?它能否實現(xiàn)IM的負(fù)載均衡?》
《從游擊隊到正規(guī)軍:馬蜂窩旅游網(wǎng)的IM系統(tǒng)架構(gòu)演進(jìn)之路》
《一套億級用戶的IM架構(gòu)技術(shù)干貨(上篇):整體架構(gòu)、服務(wù)拆分等》(* 新)
《一套億級用戶的IM架構(gòu)技術(shù)干貨(下篇):可靠性、有序性、弱網(wǎng)優(yōu)化等》(* 新)
《從新手到專家:如何設(shè)計一套億級消息量的分布式IM系統(tǒng)》(* 新)
《喜馬拉雅億級用戶量的離線消息推送系統(tǒng)架構(gòu)設(shè)計實踐》
《企業(yè)微信的IM架構(gòu)設(shè)計揭秘:消息模型、萬人群、已讀回執(zhí)、消息撤回等》
《融云技術(shù)分享:全面揭秘億級IM消息的可靠投遞機(jī)制》
(更多同類文章:?點(diǎn)此進(jìn)入…)
十、移動端IM的通信安全
IM(尤其移動端IM)的安全性一直是開發(fā)者需要優(yōu)先考慮的基礎(chǔ)問題,如何正確地理解和使用加密技術(shù)則顯的尤其重要。IM系統(tǒng)大都采用C/S、B/S、P2P等技術(shù)來實現(xiàn)即時通信的功能,軟件編制沒有統(tǒng)一的標(biāo)準(zhǔn),使得IM系統(tǒng)本身存有多種安全漏洞,加上用戶缺乏安全意識,導(dǎo)致在使用即時通信系統(tǒng)時出現(xiàn)各種安全問題。
當(dāng)今的計算機(jī)密碼學(xué)的主要作用有:加密( Encryption)、認(rèn)證(Authentication),鑒定(Identification) 。
加密:防止壞人獲取你的數(shù)據(jù);
認(rèn)證:防止壞人修改了你的數(shù)據(jù)而你卻并沒有發(fā)現(xiàn);
鑒權(quán):防止壞人假冒你的身份。
這些基本概念和加密算法原理就不在此展開敘述了。
以下文章或許有助于您設(shè)計出安全的移動端IM系統(tǒng):
《即時通訊安全篇(一):正確地理解和使用Android端加密算法》
《即時通訊安全篇(二):探討組合加密算法在IM中的應(yīng)用》
《即時通訊安全篇(三):常用加解密算法與通訊安全講解》
《即時通訊安全篇(四):實例分析Android中密鑰硬編碼的風(fēng)險》
《即時通訊安全篇(五):對稱加密技術(shù)在Android平臺上的應(yīng)用實踐》
《即時通訊安全篇(六):非對稱加密技術(shù)的原理與應(yīng)用實踐》
《傳輸層安全協(xié)議SSL/TLS的Java平臺實現(xiàn)簡介和Demo演示》
《理論聯(lián)系實際:一套典型的IM通信協(xié)議設(shè)計詳解(含安全層設(shè)計)》
《微信新一代通信安全解決方案:基于TLS1.3的MMTLS詳解》
《來自阿里OpenIM:打造安全可靠即時通訊服務(wù)的技術(shù)實踐分享》
《簡述實時音視頻聊天中端到端加密(E2EE)的工作原理》
《移動端安全通信的利器——端到端加密(E2EE)技術(shù)詳解》
《Web端即時通訊安全:跨站點(diǎn)WebSocket劫持漏洞詳解(含示例代碼)》
《通俗易懂:一篇掌握即時通訊的消息傳輸安全原理》
(更多同類文章:點(diǎn)此進(jìn)入…)
十一、有關(guān)IM中的實時音視頻技術(shù)
IM應(yīng)用中的實時音視頻技術(shù),幾乎是IM開發(fā)中的最后一道高墻。原因在于:實時音視頻技術(shù) = 音視頻處理技術(shù) + 網(wǎng)絡(luò)傳輸技術(shù) 的橫向技術(shù)應(yīng)用集合體,而公共互聯(lián)網(wǎng)不是為了實時通信設(shè)計的。實時音視頻技術(shù)上的實現(xiàn)內(nèi)容主要包括:音視頻的采集、編碼、網(wǎng)絡(luò)傳輸、解碼、播放等環(huán)節(jié)。這么多項并不簡單的技術(shù)應(yīng)用,如果把握不當(dāng),將會在在實際開發(fā)過程中遇到一個又一個的坑。
以下文章有助于您從零理解IM的實時音視頻開發(fā)的方方面面:
《即時通訊音視頻開發(fā)(一):視頻編解碼之理論概述》
《即時通訊音視頻開發(fā)(二):視頻編解碼之?dāng)?shù)字視頻介紹》
《即時通訊音視頻開發(fā)(三):視頻編解碼之編碼基礎(chǔ)》
《即時通訊音視頻開發(fā)(四):視頻編解碼之預(yù)測技術(shù)介紹》
《即時通訊音視頻開發(fā)(五):認(rèn)識主流視頻編碼技術(shù)H.264》
《即時通訊音視頻開發(fā)(六):如何開始音頻編解碼技術(shù)的學(xué)習(xí)》
《即時通訊音視頻開發(fā)(七):音頻基礎(chǔ)及編碼原理入門》
《即時通訊音視頻開發(fā)(八):常見的實時語音通訊編碼標(biāo)準(zhǔn)》
《即時通訊音視頻開發(fā)(九):實時語音通訊的回音及回音消除概述》
《即時通訊音視頻開發(fā)(十):實時語音通訊的回音消除技術(shù)詳解》
《即時通訊音視頻開發(fā)(十一):實時語音通訊丟包補(bǔ)償技術(shù)詳解》
《即時通訊音視頻開發(fā)(十二):多人實時音視頻聊天架構(gòu)探討》
《即時通訊音視頻開發(fā)(十三):實時視頻編碼H.264的特點(diǎn)與優(yōu)勢》
《即時通訊音視頻開發(fā)(十四):實時音視頻數(shù)據(jù)傳輸協(xié)議介紹》
《即時通訊音視頻開發(fā)(十五):聊聊P2P與實時音視頻的應(yīng)用情況》
《即時通訊音視頻開發(fā)(十六):移動端實時音視頻開發(fā)的幾個建議》
《即時通訊音視頻開發(fā)(十七):視頻編碼H.264、VP8的前世今生》
《實時語音聊天中的音頻處理與編碼壓縮技術(shù)簡述》
《網(wǎng)易視頻云技術(shù)分享:音頻處理與壓縮技術(shù)快速入門》
《學(xué)習(xí)RFC3550:RTP/RTCP實時傳輸協(xié)議基礎(chǔ)知識》
《基于RTMP數(shù)據(jù)傳輸協(xié)議的實時流媒體技術(shù)研究(論文全文)》
《聲網(wǎng)架構(gòu)師談實時音視頻云的實現(xiàn)難點(diǎn)(視頻采訪)》
《淺談開發(fā)實時視頻直播平臺的技術(shù)要點(diǎn)》
《還在靠“喂喂喂”測試實時語音通話質(zhì)量?本文教你科學(xué)的評測方法!》
《實現(xiàn)延遲低于500毫秒的1080P實時音視頻直播的實踐分享》
《移動端實時視頻直播技術(shù)實踐:如何做到實時秒開、流暢不卡》
《如何用最簡單的方法測試你的實時音視頻方案》
《技術(shù)揭秘:支持百萬級粉絲互動的Facebook實時視頻直播》
《簡述實時音視頻聊天中端到端加密(E2EE)的工作原理》
《移動端實時音視頻直播技術(shù)詳解(一):開篇》
《移動端實時音視頻直播技術(shù)詳解(二):采集》
《移動端實時音視頻直播技術(shù)詳解(三):處理》
《移動端實時音視頻直播技術(shù)詳解(四):編碼和封裝》
《移動端實時音視頻直播技術(shù)詳解(五):推流和傳輸》
《移動端實時音視頻直播技術(shù)詳解(六):延遲優(yōu)化》
《理論聯(lián)系實際:實現(xiàn)一個簡單地基于HTML5的實時視頻直播》
《IM實時音視頻聊天時的回聲消除技術(shù)詳解》
《淺談實時音視頻直播中直接影響用戶體驗的幾項關(guān)鍵技術(shù)指標(biāo)》
《如何優(yōu)化傳輸機(jī)制來實現(xiàn)實時音視頻的超低延遲?》
《首次披露:快手是如何做到百萬觀眾同場看直播仍能秒開且不卡頓的?》
《Android直播入門實踐:動手搭建一套簡單的直播系統(tǒng)》
《網(wǎng)易云信實時視頻直播在TCP數(shù)據(jù)傳輸層的一些優(yōu)化思路》
《實時音視頻聊天技術(shù)分享:面向不可靠網(wǎng)絡(luò)的抗丟包編解碼器》
《P2P技術(shù)如何將實時視頻直播帶寬降低75%?》
《專訪微信視頻技術(shù)負(fù)責(zé)人:微信實時視頻聊天技術(shù)的演進(jìn)》
《騰訊音視頻實驗室:使用AI黑科技實現(xiàn)超低碼率的高清實時視頻聊天》
《微信團(tuán)隊分享:微信每日億次實時音視頻聊天背后的技術(shù)解密》
《近期大熱的實時直播答題系統(tǒng)的實現(xiàn)思路與技術(shù)難點(diǎn)分享》
《福利貼:最全實時音視頻開發(fā)要用到的開源工程匯總》
《七牛云技術(shù)分享:使用QUIC協(xié)議實現(xiàn)實時視頻直播0卡頓!》
《實時音視頻聊天中超低延遲架構(gòu)的思考與技術(shù)實踐》
《理解實時音視頻聊天中的延時問題一篇就夠》
《實時視頻直播客戶端技術(shù)盤點(diǎn):Native、HTML5、WebRTC、微信小程序》
《寫給小白的實時音視頻技術(shù)入門提綱》
《微信多媒體團(tuán)隊訪談:音視頻開發(fā)的學(xué)習(xí)、微信的音視頻技術(shù)和挑戰(zhàn)等》
《騰訊技術(shù)分享:微信小程序音視頻技術(shù)背后的故事》
《直播系統(tǒng)聊天技術(shù)(四):百度直播的海量用戶實時消息系統(tǒng)架構(gòu)演進(jìn)實踐》
《實時音視頻開發(fā)理論必備:如何省流量?視頻高度壓縮背后的預(yù)測技術(shù)》
(更多同類文章:?點(diǎn)此進(jìn)入…)
另外,大家都喜歡開源免費(fèi)的東西,WebRTC是為數(shù)不多的開源且質(zhì)量上乘的實時音視頻解決方案之一,資料如下:
《開源實時音視頻技術(shù)WebRTC的現(xiàn)狀》
《簡述開源實時音視頻技術(shù)WebRTC的優(yōu)缺點(diǎn)》
《訪談WebRTC標(biāo)準(zhǔn)之父:WebRTC的過去、現(xiàn)在和未來》
《良心分享:WebRTC 零基礎(chǔ)開發(fā)者教程(中文)[附件下載]》
《WebRTC實時音視頻技術(shù)的整體架構(gòu)介紹》
《新手入門:到底什么是WebRTC服務(wù)器,以及它是如何聯(lián)接通話的?》
《WebRTC實時音視頻技術(shù)基礎(chǔ):基本架構(gòu)和協(xié)議?!?/p>
《淺談開發(fā)實時視頻直播平臺的技術(shù)要點(diǎn)》
《[觀點(diǎn)] WebRTC應(yīng)該選擇H.264視頻編碼的四大理由》
《基于開源WebRTC開發(fā)實時音視頻靠譜嗎?第3方SDK有哪些?》
《開源實時音視頻技術(shù)WebRTC中RTP/RTCP數(shù)據(jù)傳輸協(xié)議的應(yīng)用》
《簡述實時音視頻聊天中端到端加密(E2EE)的工作原理》
《實時通信RTC技術(shù)棧之:視頻編解碼》
《開源實時音視頻技術(shù)WebRTC在Windows下的簡明編譯教程》
《網(wǎng)頁端實時音視頻技術(shù)WebRTC:看起來很美,但離生產(chǎn)應(yīng)用還有多少坑要填?》
>>?更多同類文章 ……
十二、移動端IM開發(fā)的其它熱點(diǎn)問題
移動端IM開發(fā)中還會遇到上述內(nèi)容未提及的內(nèi)容,以下文章或許您用的上:
《移動端IM開發(fā)需要面對的技術(shù)問題》
《開發(fā)IM是自己設(shè)計協(xié)議用字節(jié)流好還是字符流好?》
《請問有人知道語音留言聊天的主流實現(xiàn)方式嗎?》
《IM里“附近的人”功能實現(xiàn)原理是什么?如何高效率地實現(xiàn)它?》
《IM消息送達(dá)保證機(jī)制實現(xiàn)(一):保證在線實時消息的可靠投遞》
《IM消息送達(dá)保證機(jī)制實現(xiàn)(二):保證離線消息的可靠投遞》
《如何保證IM實時消息的“時序性”與“一致性”?》
《理解IM消息“可靠性”和“一致性”問題,以及解決方案探討》
《IM單聊和群聊中的在線狀態(tài)同步應(yīng)該用“推”還是“拉”?》
《IM群聊消息如此復(fù)雜,如何保證不丟不重?》
《談?wù)勔苿佣?IM 開發(fā)中登錄請求的優(yōu)化》
《IM群聊消息如此復(fù)雜,如何保證不丟不重?》
《IM開發(fā)基礎(chǔ)知識補(bǔ)課(一):正確理解前置HTTP SSO單點(diǎn)登陸接口的原理》
《IM開發(fā)基礎(chǔ)知識補(bǔ)課(二):如何設(shè)計大量圖片文件的服務(wù)端存儲架構(gòu)?》
《一種Android端IM智能心跳算法的設(shè)計與實現(xiàn)探討(含樣例代碼)》
《移動端IM登錄時拉取數(shù)據(jù)如何作到省流量?》
《通俗易懂:基于集群的移動端IM接入層負(fù)載均衡方案分享》
《完全自已開發(fā)的IM該如何設(shè)計“失敗重試”機(jī)制?》
《微信對網(wǎng)絡(luò)影響的技術(shù)試驗及分析(論文全文)》
《即時通訊系統(tǒng)的原理、技術(shù)和應(yīng)用(技術(shù)論文)》
《開源IM工程“蘑菇街TeamTalk”的現(xiàn)狀:一場有始無終的開源秀》
《從客戶端的角度來談?wù)勔苿佣薎M的消息可靠性和送達(dá)機(jī)制》
《現(xiàn)代移動端網(wǎng)絡(luò)短連接的優(yōu)化手段總結(jié):請求速度、弱網(wǎng)適應(yīng)、安全保障》
《移動端IM開發(fā)者必讀(一):通俗易懂,理解移動網(wǎng)絡(luò)的“弱”和“慢”》
《移動端IM開發(fā)者必讀(二):史上最全移動弱網(wǎng)絡(luò)優(yōu)化方法總結(jié)》
《IM開發(fā)基礎(chǔ)知識補(bǔ)課(五):通俗易懂,正確理解并用好MQ消息隊列》
《IM開發(fā)基礎(chǔ)知識補(bǔ)課(六):數(shù)據(jù)庫用NoSQL還是SQL?讀這篇就夠了!》
《IM開發(fā)基礎(chǔ)知識補(bǔ)課(七):主流移動端賬號登錄方式的原理及設(shè)計思路》
《IM開發(fā)基礎(chǔ)知識補(bǔ)課(八):史上最通俗,徹底搞懂字符亂碼問題的本質(zhì)》新文
《IM掃碼登錄技術(shù)專題(一):微信的掃碼登錄功能技術(shù)原理調(diào)試分析》
《IM掃碼登錄技術(shù)專題(二):市面主流的掃碼登錄技術(shù)原理調(diào)試分析》
《IM掃碼登錄技術(shù)專題(三):通俗易懂,IM掃碼登錄功能詳細(xì)原理一篇就夠》新文
《IM消息ID技術(shù)專題(一):微信的海量IM聊天消息序列號生成實踐(算法原理篇)》
《IM消息ID技術(shù)專題(二):微信的海量IM聊天消息序列號生成實踐(容災(zāi)方案篇)》
《IM消息ID技術(shù)專題(三):解密融云IM產(chǎn)品的聊天消息ID生成策略》新文
《IM消息ID技術(shù)專題(四):深度解密美團(tuán)的分布式ID生成算法》新文
《IM消息ID技術(shù)專題(五):開源分布式ID生成器UidGenerator的技術(shù)實現(xiàn)》
《IM消息ID技術(shù)專題(六):深度解密滴滴的高性能ID生成器(Tinyid)》
>>?更多同類文章 ……
十三、開始動手實踐(帶參考源碼)
《跟著源碼學(xué)IM(一):手把手教你用Netty實現(xiàn)心跳機(jī)制、斷線重連機(jī)制》
《跟著源碼學(xué)IM(二):自已開發(fā)IM很難?手把手教你擼一個Andriod版IM》
《跟著源碼學(xué)IM(三):基于Netty,從零開發(fā)一個IM服務(wù)端》
《跟著源碼學(xué)IM(四):拿起鍵盤就是干,教你徒手開發(fā)一套分布式IM系統(tǒng)》
《跟著源碼學(xué)IM(五):正確理解IM長連接、心跳及重連機(jī)制,并動手實現(xiàn)》
《跟著源碼學(xué)IM(六):手把手教你用Go快速搭建高性能、可擴(kuò)展的IM系統(tǒng)》
《跟著源碼學(xué)IM(七):手把手教你用WebSocket打造Web端IM聊天》
《跟著源碼學(xué)IM(八):萬字長文,手把手教你用Netty打造IM聊天》
《一種Android端IM智能心跳算法的設(shè)計與實現(xiàn)探討(含樣例代碼)》
《詳解Netty的安全性:原理介紹、代碼演示(上篇)》
《詳解Netty的安全性:原理介紹、代碼演示(下篇)》
《微信本地數(shù)據(jù)庫破解版(含iOS、Android),僅供學(xué)習(xí)研究 [附件下載]》(* 強(qiáng)烈推薦)
《Java NIO基礎(chǔ)視頻教程、MINA視頻教程、Netty快速入門視頻 [有源碼]》
《輕量級即時通訊框架MobileIMSDK的iOS源碼(開源版)[附件下載]》
《開源IM工程“蘑菇街TeamTalk”2015年5月前未刪減版完整代碼 [附件下載]》
《微信本地數(shù)據(jù)庫破解版(含iOS、Android),僅供學(xué)習(xí)研究 [附件下載]》
《NIO框架入門(四):Android與MINA2、Netty4的跨平臺UDP雙向通信實戰(zhàn) [附件下載]》
《NIO框架入門(三):iOS與MINA2、Netty4的跨平臺UDP雙向通信實戰(zhàn) [附件下載]》
《NIO框架入門(二):服務(wù)端基于MINA2的UDP雙向通信Demo演示 [附件下載]》
《NIO框架入門(一):服務(wù)端基于Netty4的UDP雙向通信Demo演示 [附件下載]》
《用于IM中圖片壓縮的Android工具類源碼,效果可媲美微信 [附件下載]》
《高仿Android版手機(jī)QQ可拖拽未讀數(shù)小氣泡源碼 [附件下載]》
《一個WebSocket實時聊天室Demo:基于node.js+socket.io [附件下載]》
《Android聊天界面源碼:實現(xiàn)了聊天氣泡、表情圖標(biāo)(可翻頁) [附件下載]》
《高仿Android版手機(jī)QQ首頁側(cè)滑菜單源碼 [附件下載]》
《開源libco庫:單機(jī)千萬連接、支撐微信8億用戶的后臺框架基石 [源碼下載]》
《分享java AMR音頻文件合并源碼,全網(wǎng)最全》
《微信團(tuán)隊原創(chuàng)Android資源混淆工具:AndResGuard [有源碼]》
《一個基于MQTT通信協(xié)議的完整Android推送Demo [附件下載]》
《Android版高仿微信聊天界面源碼 [附件下載]》
《高仿手機(jī)QQ的Android版鎖屏聊天消息提醒功能 [附件下載]》
《高仿iOS版手機(jī)QQ錄音及振幅動畫完整實現(xiàn) [源碼下載]》
《Android端社交應(yīng)用中的評論和回復(fù)功能實戰(zhàn)分享[圖文+源碼]》
《Android端IM應(yīng)用中的@人功能實現(xiàn):仿微博、QQ、微信,零入侵、高可擴(kuò)展[圖文+源碼]》
《仿微信的IM聊天時間顯示格式(含iOS/Android/Web實現(xiàn))[圖文+源碼]》
《Android版仿微信朋友圈圖片拖拽返回效果 [源碼下載]》
《IM開發(fā)寶典:史上最全,微信各種功能參數(shù)和邏輯規(guī)則資料匯總》(* 強(qiáng)烈推薦)
>>?更多同類文章 ……
附錄:其它即時通訊文章分類匯總
? WEB端即時通訊技術(shù)文章匯總:點(diǎn)此進(jìn)入
? 推送技術(shù)文章匯總:點(diǎn)此進(jìn)入
? 有關(guān)QQ、微信的技術(shù)文章:點(diǎn)此進(jìn)入
? 有關(guān)QQ、微信的技術(shù)故事:點(diǎn)此進(jìn)入