Jack Jiang

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

               摘要: ► 相關鏈接:① MobileIMSDK-Uniapp端的詳細介紹② MobileIMSDK-Uniapp端的開發手冊new(* 精編PDF版)一、理論知識準備您需要對Uniapp和Vue開發有所了解:1)Uniapp 官方入門教程2)可能是最好的 uniapp 入門教程3)Uniapp 官方 Vue 快速入門教程您需要對...  閱讀全文

          posted @ 2023-05-18 12:04 Jack Jiang 閱讀(161) | 評論 (0)編輯 收藏

          為了更好地分類閱讀 52im.net 總計1000多篇精編文章,我將在每周三推送新的一期技術文集,本次是第15 期。

          [- -] IM跨平臺技術學習(一):快速了解新一代跨平臺桌面技術——Electron

          [鏈接] http://www.52im.net/thread-2616-1-1.html

          [摘要] 本文將從入門者的角度,為你快速講解Electron到底是個什么技術,包括案例介紹、技術優勢、技術體驗、實現原理等。

          [- 2 -] IM跨平臺技術學習(二):Electron初體驗(快速開始、跨進程通信、打包、踩坑等)

          [鏈接] http://www.52im.net/thread-4039-1-1.html

          [摘要] 本篇將帶你簡單上手Electron框架開發跨平臺桌面端,內容包括一個快速開始例子、跨進程通信原理、打包和分發、以及一些典型的技術踩坑等。希望能帶給你啟發。

          [- 3 -] IM跨平臺技術學習(三):vivo的Electron技術棧選型、全方位實踐總結

          [鏈接] http://www.52im.net/thread-4044-1-1.html

          [摘要] 本篇將基于vivo技術團隊的技術實踐,詳細闡述了vivo在使用Electron進行跨端桌面開發時的技術棧選型考量,同時分享了在打包構建、版本更新、性能優化、質量保障、安全性等方面的實踐方案和踩坑總結。

          [- 4 -] IM跨平臺技術學習(四):蘑菇街基于Electron開發IM客戶端的技術實踐

          [鏈接] http://www.52im.net/thread-4051-1-1.html

          [摘要] 本篇將回到IM即時通訊技術本身,根據蘑菇街的實際技術實踐,總結和分享基于Electron開發跨平臺IM客戶端的過程中,需要考慮的典型技術問題以及我們的解決方案。

          [- 5 -] IM跨平臺技術學習(五):融云基于Electron的IM跨平臺SDK改造實踐總結

          [鏈接] http://www.52im.net/thread-332-1-1.html

          [摘要] 本文分享的是融云基于Electron的IM跨平臺PC端SDK改造過程中所總結的一些實踐經驗,希望對你有用。

          [- 6 -] IM跨平臺技術學習(六):網易云信基于Electron的IM消息全文檢索技術實踐

          [鏈接] http://www.52im.net/thread-4065-1-1.html

          [摘要] 本文將要分享的是,網易云信基于Electron的PC端是如何實現IM客戶端全文檢索能力的。

          [- 7 -] IM跨平臺技術學習(七):得物基于Electron開發客服IM桌面端的技術實踐

          [鏈接] http://www.52im.net/thread-4159-1-1.html

          [摘要] 本文要分享的是得物技術團隊基于Electron開發客服IM桌面端的技術實踐過程,內容包括桌面技術選型、Electron的基礎概念、具體的實施技術方案、遇到的棘手問題等。

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

          [鏈接] http://www.52im.net/thread-2202-1-1.html

          [摘要] 本文將從架構開始,到手機 QQ 移動端優化,再到個性化紅包和 AR 新玩法,為大家全面解密 QQ 紅包技術方案。

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

          [鏈接] http://www.52im.net/thread-2519-1-1.html

          [摘要] 本文要分享的是微信團隊是如何從0到1實現“有把握”的微信春晚搖一搖紅包系統的。

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

          [鏈接] http://www.52im.net/thread-2533-1-1.html

          [摘要] 本文將由微信團隊工程師張文瑞分享微信春節搖一搖紅包技術背后的方方面面,希望能給同行們帶來啟發。

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

          [鏈接] http://www.52im.net/thread-2548-1-1.html

          [摘要] 本文將為讀者介紹微信百億級別紅包背后的高并發設計實踐,內容包括微信紅包系統的技術難點、解決高并發問題通常使用的方案,以及微信紅包系統的所采用高并發解決方案。

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

          [鏈接] http://www.52im.net/thread-2564-1-1.html

          [摘要] 本次分享介紹了微信紅包后臺系統的高可用實踐經驗,主要包括后臺的 set 化設計、異步化設計、訂單異地存儲設計、存儲層容災設計與平行擴縮容等。聽眾可以了解到微信紅包后臺架構的設計細節,共同探討高可用設計實踐上遇到的問題與解決方案。

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

          [鏈接] http://www.52im.net/thread-2568-1-1.html

          [摘要] 微信紅包本質是小額資金在用戶帳戶流轉,有發、搶、拆三大步驟。在這個過程中對事務有高要求,所以訂單最終要基于傳統的RDBMS,這方面是它的強項,最終訂單的存儲使用互聯網行業最通用的MySQL數據庫。支持事務、成熟穩定,我們的團隊在MySQL上有長期技術積累。但是傳統數據庫的擴展性有局限,需要通過架構解決。

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

          [鏈接] http://www.52im.net/thread-2573-1-1.html

          [摘要] 經過多年的發展,口碑和社交業務的崛起讓支付寶架構進一步在原有架構基礎上拓展出支持線下市場和社交的生活互動型架構。2015 年錢包 9.0 的發布,這個里程碑式的項目初步奠定了支付 + 移動互聯網金融 + 生活互動型混合架構。

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

          [鏈接] http://www.52im.net/thread-2576-1-1.html

          [摘要] 在服務器數量一定的情況下,如何構建高并發操作、瞬間峰值高的穩定服務?對于團隊和架構師都是一個極大的挑戰。這時候系統的架構尤為重要!本文將為你分享這些內容。

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

          [鏈接] http://www.52im.net/thread-2583-1-1.html

          [摘要] 本文將會詳細介紹手Q春節紅包項目的功能設計/邏輯、容災、運維、架構以及實踐總結。

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

          [鏈接] http://www.52im.net/thread-2966-1-1.html

          [摘要] 對于這種大體量的IM社交應用運營活動,技術上除了前端、后臺的大力支撐,對于手Q客戶端來說,又是從哪些方面來保證整個紅包活動的靈活性、穩定性和用戶體驗的呢?帶著這個問題,我們一起來閱讀余下的文字。

          [- 18-]社交軟件紅包技術解密(十一):解密微信紅包隨機算法(含代碼實現)

          [鏈接] http://www.52im.net/thread-3125-1-1.html

          [摘要] 本文根據有限的資料,分享了微信紅包隨機算法實現中的一些技術要點,并整理了兩種比較靠譜的紅包算法實現思路(含可運行的實現代碼),希望能給你的紅包算法開發帶來啟發。

          [- 19-]社交軟件紅包技術解密(十二):解密抖音春節紅包背后的技術設計與實踐

          [鏈接] http://www.52im.net/thread-3945-1-1.html

          [摘要] 本文將要分享的是春節期間海量紅包社交活動為抖音所帶來的各種技術挑戰,以及抖音技術團隊是如何在實踐中一一解決這些問題的。

          ??52im社區本周新文:《即時通訊框架MobileIMSDK的Uniapp端開發者手冊(精編PDF導出圖片) http://www.52im.net/thread-4234-1-1.html》,歡迎閱讀!??

          我是Jack Jiang,我為自已帶鹽!https://github.com/JackJiang2011/MobileIMSDK/

          posted @ 2023-05-16 13:29 Jack Jiang 閱讀(110) | 評論 (0)編輯 收藏

          一、基本介紹

          MobileIMSDK-Uniapp端是一套基于Uniapp跨端框架的即時通訊庫:

          • 1)超輕量級、無任何第3方庫依賴(開箱即用);
          • 2)純JS編寫、ES6語法、高度提煉,簡單易用;
          • 3)基于Uniapp標準WebSocket API,簡潔優雅;
          • 4)理論上可運行于任何支持Uniapp跨端框架的平臺上;
          • 5)能與 MobileIMSDKGithub托管鏈接) 的各種客戶端完美互通;
          • 6)可應用于基于Uniapp的跨平臺App或Web的消息推送、客服聊天、企業OA、IM等場景。

          詳細開發資料:

          二、與MobileIMSDK的關系

          MobileIMSDK-Uniapp端 是基于Uniapp標準 WebSocket API的 MobileIMSDK配套客戶端庫。

          以下是MobileIMSDK的最新通信架構圖:

           

          MobileIMSDK是一套專為移動端開發的原創開源IM通信層框架:

          • 1)歷經8年、久經考驗;
          • 2)超輕量級、高度提煉,lib包50KB以內;
          • 3)精心封裝,一套API同時支持UDP、TCP、WebSocket三種協議(可能是全網唯一開源的);
          • 4)客戶端支持iOS、Android、標準Java、H5(暫未開源)、微信小程序(暫未開源)、Uniapp:new:(暫未開源);
          • 5)服務端基于Netty,性能卓越、易于擴展;
          • 6)可與姊妹工程 MobileIMSDK-Web 無縫互通實現網頁端聊天或推送等;
          • 7)可應用于跨設備、跨網絡的聊天APP、企業OA、消息推送等各種場景。

          PS: MobileIMSDK一直在持續開發和升級中,本Uniapp客戶端是MobileIMSDK工程的最新成果。

          三、設計目標

          直接使用Uniapp的WebSocket API開擼,有以下問題和劣勢:

          • 1)功能有限: 沒有心跳?;睢嗑€重連、消息送達保證(重傳和去重)等即時通訊關鍵算法和邏輯;
          • 2)API簡陋: 在如此有限的API接口下,能邏輯清晰且健壯地實現并組合心跳?;?、斷線重連、消息送達保證等算法,需要相當高的技術掌控力;
          • 3)邏輯耦合: 經驗欠缺的開發人員,會將WebSocket通信與前端UI界面代碼混在一起,使得UI界面的編寫、維護、改版都非常困難。

          針對以上問題: MobileIMSDK-Uniapp端庫將讓開發者專注于UI應用層的開發,網絡通信層的專業代碼交由SDK開發人員,從而解偶UI前端和通信層的邏輯耦合性,大大降低技術復雜度和應用門檻。

          MobileIMSDK-Uniapp端庫的設計目標是為您的開發帶來以下便利:

          • 1)界面與通信解偶: UI界面與網絡通信代碼解耦,UI界面的重構、維護、改版都非常容易和優雅;
          • 2)輕量級和兼容性: 受益于堅持使用Uniapp的標準WebSocket API,簡潔輕量,無需任何額外庫依賴;
          • 3)核心內聚和收斂: 得益于長期的提煉和經驗積累,SDK核心層高度封裝,開發者無需理解復雜算法即可簡單上手。
          • 4)純JS輕量級實現: 純JS編寫、ES6語法,無重量級框架和庫依賴(更無Native代碼),可干凈利落地對接各種既有系統;
          • 5)跨平臺運行能力: 受益于Uniapp框架的跨端特性,理論上本SDK可運行于任何支持Uniapp的平臺上。

          四、技術亮點

          • 1)輕量易使用: 超輕量級——純JS編寫且無任何第3方庫依賴,高度提煉——簡單易用;
          • 2)代碼現代感: 盡可能優先使用ES6語法,摒棄舊式JS語法的年代感;
          • 3)跨端支持好: 基于Uniapp的標準WebSocket API(無Native代碼依賴),理論上可很好地運行于任何支持Uniapp的平臺上;
          • 4)斷網恢復能力: 擁有網絡狀況自動檢測、斷網自動治愈的能力;
          • 5)送達保證機制: 完善的QoS消息送達保證機制(自動重傳、消息去重、狀態反饋等),不漏過每一條消息;
          • 6)通信協議封裝: 實現了一個對上層透明的即時通訊通信協議模型;
          • 7)身份認證機制: 實現了簡單合理的身份認證機制;
          • 8)完善的log信息: 在開發調試階段,確保每一個算法關鍵步驟都有日志輸出,讓您的運行調試更為便利;
          • 9)界面代碼解耦: 實現了UI界面代碼與SDK網絡通信代碼解偶,防止界面代碼跟IM核心代碼混在一起,不利于持續升級、重用和維護;
          • 10)多端協議兼容: 實現了與MobileIMSDK各種客戶端完全兼容的協議模型。

          五、文件組成

          SDK代碼文件概覽:

          SDK代碼文件用途說明:

          六、Demo運行效果和說明

          七、跨平臺運行效果演示

          1)Demo在內置瀏覽器中的運行效果:

          2)Demo在電腦瀏覽器中的運行效果(以Chrome為例):

          3)Demo在Android真機上的運行效果:

          4)Demo在iOS模擬器上的運行效果:

          5)Demo在iOS真機上的運行效果:

          6)Demo在微信小程序上的運行效果:

          7)Demo在支付寶小程序上的運行效果:

          其它更多平臺的運行效果就不一一列舉了,因為都要安裝各自的開發工具,硬盤空間吃緊 。。。

          八、詳細資料

          ① MobileIMSDK-Uniapp端的詳細介紹:點此查看 ??
          ② MobileIMSDK-Uniapp端的開發手冊(網頁版):點此查看 ??
           MobileIMSDK-Uniapp端的開發手冊(精編PDF版):點此查看 ?? (* 推薦
          ④ MobileIMSDK-開源框架的詳細介紹:https://gitee.com/jackjiang/MobileIMSDK (Github托管鏈接)??

          posted @ 2023-05-12 11:44 Jack Jiang 閱讀(102) | 評論 (0)編輯 收藏

               摘要: 本文由阿里技術團隊詹向陽(驍飏)分享,原題“一文讀懂字符編碼”,有修訂和改動。一、引言說起計算機字符編碼,讓我想起了科幻巨作《三體-黑暗深林》人類遇到外星文明魔戒的畫面(以下內容摘自大劉的原文)。人類第一次近距離看到四維物體魔戒,卓文用中頻電波發送了一個問候語。這是一幅簡單的點陣圖,圖中由六行不同數量的點組成了一個質數數列:1,3,5,7,11,13。他們沒有指望得到應答,...  閱讀全文

          posted @ 2023-05-11 11:55 Jack Jiang 閱讀(124) | 評論 (0)編輯 收藏

               摘要: 【來源申明】本文引用了微信公眾號“鮮棗課堂”的《上網慢?經常掉線?這篇文章告訴你該怎么辦!》文章內容。為了更好的內容呈現,即時通訊網在引用和收錄時內容有改動,轉載時請注明原文來源信息,尊重原作者的勞動。1、本文內容概述對于不太了解網絡通信的人來說(包括開發者),可能會經常碰到下面這些問題:“手機(電腦)上網經常掉線,是為什么?”“手機(電...  閱讀全文

          posted @ 2023-05-06 11:21 Jack Jiang 閱讀(93) | 評論 (0)編輯 收藏

          為了更好地分類閱讀52im.net 總計1000多篇精編文章,我將在每周三推送新的一期技術文集,本次是第14 期。

          [- 1 -] 新手快速入門:WebSocket簡明教程

          [鏈接] http://www.52im.net/thread-831-1-1.html

          [摘要] 通俗的講,WebSocket 是一種新的網絡通信協議,現在瀏覽器端很多高級功能都需要用到它。本文將以通俗易懂的方式介紹 WebSocket 協議的使用方法,適合初學者快速入門之用。

          [- 2 -] WebSocket從入門到精通,半小時就夠!

          [鏈接] http://www.52im.net/thread-3134-1-1.html

          [摘要] 本文也是一篇關于WebSocket從入門到精通的文章,內容由淺入深,比較適合想要在短時間內較深入的了解WebSocket協議的開發者學習。

          [- 3 -] WebSocket詳解(一):初步認識WebSocket技術

          [鏈接] http://www.52im.net/thread-331-1-1.html

          [摘要] HTML5規范在傳統的web交互基礎上為我們帶來了眾多的新特性,隨著web技術被廣泛用于web APP的開發,這些新特性得以推廣和使用,而websocket作為一種新的web通信技術具有巨大意義。本文將帶您認識WebSocket。

          [- 4 -] WebSocket詳解(二):技術原理、代碼演示和應用案例

          [鏈接] http://www.52im.net/thread-326-1-1.html

          [摘要] 本文將簡要介紹 WebSocket 的由來、原理機制以及服務端/客戶端實現,并以實際客戶案例指導并講解了如何使用 WebSocket 解決實時響應及服務端消息推送方面的問題。

          [- 5 -] WebSocket詳解(三):深入WebSocket通信協議細節

          [鏈接] http://www.52im.net/thread-332-1-1.html

          [摘要] ebSocket 是HTML5一種新的web通信技術,它真正實現了瀏覽器與服務器的全雙工實時通信(full-duplex)。本文將詳解介紹WebSocket的通信協議細節。

          [- -] WebSocket詳解(四):刨根問底HTTP與WebSocket的關系(上篇)

          [鏈接] http://www.52im.net/thread-1258-1-1.html

          [摘要] 因本文有點長,所以分成了上下兩篇,本文將首先以通俗易懂的語言著重介紹HTTP協議,下篇中再展開WebSocket協議相關的文字。

          [- 7 -] WebSocket詳解(五):刨根問底HTTP與WebSocket的關系(下篇)

          [鏈接] http://www.52im.net/thread-1266-1-1.html

          [摘要] 本文的上篇《WebSocket詳解(四):刨根問底HTTP與WebSocket的關系(上篇)》介紹了HTTP1.1協議的基本內容,這篇文章將繼續分析WebSocket協議,然后對這兩個進行簡單的比較。

          [- 8-]  WebSocket詳解(六):刨根問底WebSocket與Socket的關系

          [鏈接] http://www.52im.net/thread-1273-1-1.html

          [摘要] 目前網上全面介紹這兩種協議的中文文章并不多,或者說不夠全面。我無法找到一篇文章能解決上面的所有問題。因此,我寫了本文,把找到的 Socket 和 WebSocket 的相關資料做一個梳理,以方便理解。

          [- 9 -] WebSocket硬核入門:200行代碼,教你徒手擼一個WebSocket服務器

          [鏈接] http://www.52im.net/thread-3175-1-1.html

          [摘要] 本文分享了自已開發一個WebSocket服務端實現過程中需要的知識儲備,以及具體的代碼實現含義等,非常適合想在短時間內對WebSocket協議從入門到精通的Web端即時通訊開發者閱讀。

          [- 10 -] Web端即時通訊安全:跨站點WebSocket劫持漏洞詳解(含示例代碼)

          [鏈接] http://www.52im.net/thread-793-1-1.html

          [摘要] 本文將深入淺出為讀者介紹跨站點 WebSocket 漏洞的原理、檢測方法和修復方法,希望能幫助廣大讀者在實際工作中避免這個已知安全漏洞。

          [- 11 -] 長連接網關技術專題(四):愛奇藝WebSocket實時推送網關技術實踐

          [鏈接] http://www.52im.net/thread-3539-1-1.html

          [摘要] 本文分享了愛奇藝基于Netty實現WebSocket長連接實時推送網關時的實踐經驗總結。

          [- 12 -] Web端即時通訊實踐干貨:如何讓你的WebSocket斷網重連更快速?

          [鏈接] http://www.52im.net/thread-3098-1-1.html

          [摘要] 本文將基于筆者的開發實踐,分享WebSocket在不同狀態下、不同的網絡場景下,應該如何實現快速斷網重連。

          [- 13 -] 理論聯系實際:從零理解WebSocket的通信原理、協議格式、安全性

          [鏈接] http://www.52im.net/thread-1341-1-1.html

          [摘要] 本文由淺入深,介紹了WebSocket如何建立連接、交換數據的細節,以及數據幀的格式。此外,還簡要介紹了針對WebSocket的安全攻擊,以及協議是如何抵御類似攻擊的。

          [- 14 -] 微信小程序中如何使用WebSocket實現長連接(含完整源碼)

          [鏈接] http://www.52im.net/thread-1703-1-1.html

          [摘要] 這篇文章分享了一個基于WebSocket長連接的微信小程序——簡單的剪刀石頭布小游戲的制作過程,希望能對想要在微信小程序中使用 WebSocket 的開發者有所幫助。

          [- 15 -] 八問WebSocket協議:為你快速解答WebSocket熱門疑問

          [鏈接] http://www.52im.net/thread-2488-1-1.html

          [摘要] 本文將從8個常見的疑問入手,為還不了解WebSocket協議的開發者快速普及相關知識,從而節省您學習WebSocket的時間。

          ??52im社區本周新文:《IM開發干貨分享:IM客戶端不同版本兼容運行的技術思路和實踐總結 http://www.52im.net/thread-4202-1-1.html》,歡迎閱讀!??

          我是Jack Jiang,我為自已帶鹽!https://github.com/JackJiang2011/MobileIMSDK/

          posted @ 2023-05-04 13:45 Jack Jiang 閱讀(81) | 評論 (0)編輯 收藏

          本文由鞏鵬軍分享,原題“IM兼容性基建”,本文有修訂。

          1、引言

          一個成熟的IM成品,在運營過程中隨著時間的推移,會發布不同的版本,但為了用戶體驗并不能強制要求用戶必須升級到最新版本,而服務端此時已經是最新版本了,所以為了讓這些不同客戶端版本的用戶都能正常使用(尤其IM這種產品,不同版本可能通信協議都會有變動,這就更要命了),則必須要針對不同客戶端版本的兼容處理。

          本文將基于筆者的IM產品開發和運營實踐,為你分享如何實現不同APP客戶端版本與服務端通信的兼容性處理方案。

           

          學習交流:

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

          2、關于作者

          鞏鵬軍:專注移動開發十多年,熱愛即時通訊技術。個人微信公眾號:“鞏鵬軍”。

          作者在即時通訊網分享的另一篇《知識科普:IM聊天應用是如何將消息發送給對方的?(非技術篇)》,感興趣的讀者也可以看看。

          3、一個App時怎么辦?

          提示:“一個App”指的是同一個IM服務端,只服務于一個特定的IM產品。

          首先想到的就是直接使用App版本號判斷新老版本并進行兼容處理。

          如下圖所示:

          一般來說,不同的IM客戶端(如iOS、Android、Windows、Mac)都是同步迭代,多端發版時間一致,App版本號也一樣。

          所以用跨多端的App版本號可以很容易地讓服務端只用寫一遍判斷和兼容邏輯。

          示例:假設從V2.1.0開始應用紅包消息,那么判斷客戶端是否支持紅包的邏輯就很簡單。

          偽代碼如下:

          booleanisSupportRedEnvelop(String appVersion) {

           returngte(appVersion, "2.1.0");

          }

          附:版本號比對邏輯(未充分考慮異常情況):

          List<Integer> toNums(String version) {

            Matcher matcher = Pattern

           

              .compile("/[0-9]+\\.[0-9]+\\.[0-9]+")

           

              .matcher(version);

           

            String versionString = matcher.find()

           

              ? matcher.group(0).substring(1)

           

              : "1.0.0";

           

            List<Integer> verNums = Arrays

           

              .stream(versionString.split("\\."))

           

              .map(Integer::valueOf)

               .collect(Collectors.toList());

            returnverNums;

          }

           

          booleangte(String version, String target) {

           

            List<Integer> appVerNums = toNums(version);

            Integer appMajor = appVerNums.get(0);

            Integer appMinor = appVerNums.get(1);

            Integer appPatch = appVerNums.get(2);

            List<Integer> targetNums = toNums(target);

            Integer targetMajor = targetNums.get(0);

            Integer targetMinor = targetNums.get(1);

            Integer targetPatch = targetNums.get(2);

            return(appMajor >= targetMajor) ||

                   (appMinor >= targetMinor) ||

                   (appPatch >= targetPatch);

          }

          4、多個App時怎么辦?

          4.1概述

          提示:“多個App”指的是同一個IM服務端,可能作為通用服務,作為多個不同APP產品中的聊天模塊使用的場景。

          只有一個App時肯定是比較簡單的。但現實情況是一套IM系統通常會用于多個業務場景,這是很普遍的現象。業界的知名IM產品,比如釘釘、飛書、企業微信、美團大象等都是這樣。

          底層邏輯大概是:IM系統比較復雜,功能繁多而且難以實現、更難以穩定,所以一個IM團隊維護一套IM系統,然后應用在多個業務場景就是最具性價比的選擇了。

          4.2使用App版本

          每個業務場景都會有自己的客戶端App,每個App都有自己的版本號,那么根據App版本號判斷新老版本的邏輯就不適用了(如下圖所示)。

          一個App時可以這樣做兼容性判斷:

          booleanisSupportRedEnvelop(String appVersion) {

           returngte(appVersion, "2.1.0");

          }

          多個App時的兼容性判斷:

          booleanisSupportRedEnvelop(String version) {

              return

              (app.equals("App1")&>e(version,"2.1.0"))||

              (app.equals("App2")&>e(version,"2.2.3"))||

              (app.equals("App3")&>e(version,"6.1"));

          }

          4.3使用App版本號的麻煩

          隨著App的增多,需要的判斷也越多,這會很麻煩,也很容易出錯。

          每個App推出新版本后,用戶不可能瞬間就升級到最新版本,根據經驗,每個App往往都會同時存在十個以上的不同版本。

          這就會形成如下圖所示的局面:

          5、多個App時,可將IM能力提煉為一套公用代碼

          多個App時的問題總結起來就是:一套服務端代碼如何適應集成了不同IM能力的不同App客戶端?

          我們來具體舉例分析一下,假設一個IM團隊維護的IM相關的客戶端模塊有IM Client SDK、聯系人、長連接、朋友圈等四個模塊(如下圖所示)。

          如上圖所示:

          • 1)App 1:集成了全部四個模塊;
          • 2)App 2:只集成了三個模塊;
          • 3)App 3:只集成了三個模塊。

          因為三個App面向的客戶群不同,發版節奏不同,所以各自集成的IM的能力也不同。

          比如下面這樣:

          • 1)App 1:面向內部員工辦公溝通使用的App 1需要功能豐富,對于穩定性和Bug有一定的包容性,也容易溝通和修復再發版;
          • 2)App 2:面向客服場景,用于企業的客服專員和企業的C端用戶溝通解決客訴問題,對于穩定性要求高,C端用戶升級率不好控制,發版節奏慢,最快只能和主業務App一致;
          • 3)App 3:面向企業和B端供應商,比如美團和美團上的商戶,京東和京東平臺上的第三方商家,對于穩定性要求也比較高,B端商家的升級率好控制一點,發版節奏也可以快一些。

          從上圖可以看出,因為IM核心能力是同一個團隊維護,所以Core包含的多個模塊的代碼必然是只有一套源代碼。不同App只是Core集成打包出來的產物,或者說不同App只是Core外面套了不同的殼而已,只要Core一樣,則App的IM能力就一樣(這就是本節標題所述的“多個App時,可將IM能力提煉為一套公用的代碼”這個意思)。

          6、給每個App中使用的公用代碼(Core)一個版本號

          如上節所述,我們將IM能力提煉為一套公用代碼(以下內容簡稱“Core”)。

          那么,我們能不能給Core一個版本標識呢?

          答案是肯定的:

          站在App的角度,每個App相當于打上了Core版本標簽:

          7、如何正確地解讀Core版呢?

          7.1拋開App看Core版本

          如果不看App版本,只看Core版本標簽:

          7.2從一套服務端代碼看Core版本

          同一個IM團隊,其IM Servers必然也是同一套代碼集,不考慮部署的區別。

          那么上圖邏輯上等價于下圖:

          7.3使用Core版本的兼容性判斷

          站在Core的視角,多個App就像單個App類似,只是使用的版本標識不同。

          具體如下:

          • 1)單個App時,IM服務端要區分不同App版本;
          • 2)多個App時,IM服務端要區分不同Core版本。

          還拿是否支持紅包的判斷舉例。

          一個App時:

          booleanisSupportRedEnvelop(String appVersion){

           

          returngte(appVersion, "2.1.0");

          }

          多個App時:

          booleanisSupportRedEnvelop(Integer coreVersion){

           

           returncoreVersion >= 2;

          }

          通過Core版本號,我們可以把兼容邏輯判斷簡化到和單個App一樣的簡單。

          8、關于Core版本的命名和取值

          關于Core版本號的取值,有下列可能的選項:

          • 選項一:語義版本號 1.2.0;
          • 選項二:整數 自然數 1 2 3;
          • 選項三:整數 迭代日期 20220819 或 220819。

          因為Core版本號不用給最終用戶看的,無需遵循常見的語義版本號規范。而且Core版本號只用于版本對比,所以整數會是一個比較好的選擇,方便比較,準確可靠。

          用自然數 1、 2、 3作為Core版本號是可以的,每個迭代發布新的Core版本時遞增一下就可以了。

          但是考慮到有多個終端平臺iOS、Android、Windows、Mac,如果某個平臺的Core發布后發現小Bug需要HotFix,那么要遞增版本號,就會擠占其它端的下一個自然數。究其原因,在于自然數是連續的,沒辦法在兩個常規的版本間插入一個HotFix版本。

          選項三就可以解決這個問題:因為Core的迭代發布日期是稀疏的,若干天后才會發布一個Core版本,那么當某個端需要一個HotFix版本時,選擇HotFix當天的日期作為版本號即可。

          總體上:多個端的主要版本號都是約定的統一的發布日期,多端一致,同時允許某個端臨時HotFix插入一個新的版本號,保留彈性。

          參考 Google 對Android SDK API版本的實踐,我們可以把Core版本號命名為core_level,取值為Core的發布日期的整數表示。

          9、多個App情況下的其它版本標識

          1)platform:

          一套Core,不同端在實際開發中,可能存在差異,為了針對具體端進行特定的兼容,需要知道當前是哪個端,可以約定platform字段表示端。取值可以是:ios、android、win、mac、linux等。

          2)App版本號:

          在IM相關邏輯的兼容性判斷中,只需使用跨App的多端一致的core_level了。但是為了和最終用戶、產品經理等溝通方便,保留App版本號app_version用于人和人之間溝通交流。core_level主要用于研發工程師之間,還有工程師和程序之間的溝通。兩者各取所長。

          10、版本標識的傳輸方式

          每個API和每條長連接數據包都攜帶Core版本,這樣服務端可以無狀態得處理每一個請求。如果需要在服務端主動推送時區分目標端的版本,可以在App登錄時將其攜帶的Core版本落庫存儲,然后推送時查詢使用。

          10.1短連接(HTTP)

          HTTP短連接通過新增Header字段方式傳輸:

          curl "https://{domain}/api/v1/xxx"\

            -H "platform: ios"\

            -H "app_version: 8.0.25"\

            -H "core_level: 220819"

          10.2長連接(Socket)

          長連接SDK通過類似HTTP Header的方式傳輸:

          {

            "platform":"ios",

            "app_version":"8.0.25",

            "core_level":"220819"

           

          }

          10.3短轉長

          短轉長時HTTP Header會轉換為長連接數據body里的header通過長鏈傳遞。

          這樣就同時存在長連接header和長連接body.header兩套字段,最終以長連接body.header為準即可。

          10.4其它

          IM系統里的瀏覽器和小程序,如果可以新增HTTP Header則新增Header傳輸,實在沒有辦法可以通過User-Agent傳輸該信息,服務端優先解析Header,沒有找到時再解析User-Agent。

          服務端解析UA的正則表達式:

          / platform\/(ios|android|mac|win|linux) app_version\/([0-9]\.[0-9]+\.[0-9]+) core_level\/([1-9][0-9]+)( |$)/

          以上正則表達式在線運行效果:點此查看

          11、本文小結

          至此,我們找到了一個適用于多個App、多個子模塊、多個功能點、臨時BugFix的版本標識:Core版本號,這樣就可以很好地解決多App的IM能力兼容性問題。

          以下是版本兼容性判斷偽碼:

          booleanisSupportRedEnvelop(Integer coreLevel) {

            returncoreLevel >= 220819;

          }

          12、參考資料

          [1] Browser vs Engine Version

          [2] Node.js ABI version number

          [3] Android SDK API Level

          [4] 零基礎IM開發入門(一):什么是IM系統?

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

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

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

          [8] 一套億級用戶的IM架構技術干貨(上篇):整體架構、服務拆分等

          [9] 基于實踐:一套百萬消息量小規模IM系統技術要點總結

          [10] 一套十萬級TPS的IM綜合消息系統的架構實踐與思考

          [11] 從新手到專家:如何設計一套億級消息量的分布式IM系統

          [12] 閑魚億級IM消息系統的架構演進之路

          [13] 深度解密釘釘即時消息服務DTIM的技術設計

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

          [15] 企業微信的IM架構設計揭秘:消息模型、萬人群、已讀回執、消息撤回等

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

          posted @ 2023-04-28 10:41 Jack Jiang 閱讀(83) | 評論 (0)編輯 收藏

          為了更好地分類閱讀52im.net 總計1000多篇精編文章,我將在每周三推送新的一期技術文集,本次是第13 期。

          [- 1 -] 新手入門貼:史上最全Web端即時通訊技術原理詳解

          [鏈接] http://www.52im.net/thread-338-1-1.html

          [摘要] 本文的目的就是要詳細探討這些技術并分析其原理和過程。

          [- 2 -] Web端即時通訊技術盤點:短輪詢、Comet、Websocket、SSE

          [鏈接] http://www.52im.net/thread-336-1-1.html

          [摘要] 本文將簡要介紹這4種技術的原理,并指出各自的異同點、優缺點等。

          [- 3 -] SSE技術詳解:一種全新的HTML5服務器推送事件技術

          [鏈接] http://www.52im.net/thread-335-1-1.html

          [摘要] 本文對服務器推送技術(SSE)進行了詳細的介紹,包含瀏覽器端和服務器端的相應實現細節,為在實踐中使用該技術提供了指南。

          [- 4 -]Comet技術詳解:基于HTTP長連接的Web端實時通信技術

          [鏈接] http://www.52im.net/thread-334-1-1.html

          [摘要] 一般來說,Web端即時通訊技術因受限于瀏覽器的設計限制,一直以來實現起來并不容易,主流的Web端即時通訊方案大致有4種:傳統Ajax短輪詢、Comet技術、WebSocket技術、SSE(Server-sent Events)。本文將專門講解Comet技術。

          [- 5 -] socket.io實現消息推送的一點實踐及思路

          [鏈接] http://www.52im.net/thread-188-1-1.html

          [摘要] 對于普通站點來說, 請求-響應模式可以滿足絕大多數的功能需求,但總有某些功能我們希望能夠為用戶提供實時消息的體驗。

          [- 6 - LinkedIn的Web端即時通訊實踐:實現單機幾十萬條長連接

          [鏈接] http://www.52im.net/thread-659-1-1.html

          [摘要] 在這篇文章中會描述在我們收到了消息、分型指標和讀回復之后,如何立刻把它們發往客戶端。內容會包含我們是如何使用Play框架和Akka Actor Model來管理長連接、由服務器主動發送事件的。我們也會分享一些在生產環境中我們是如何在服務器上做負載測試,來管理數十萬條并發長連接的,還有一些心得。最后,我們會分享在整個過程中我們用到的各種優化方法。

          [- 7 -] Web端即時通訊技術的發展與WebSocket、Socket.io的技術實踐

          [鏈接] http://www.52im.net/thread-690-1-1.html

          [摘要] 為什么說Web即時通訊技術這么重要?我們生活在一個實時(real-time)的世界中,因此Web的最終最自然的狀態也應當是實時的。用戶需要實時的溝通、數據和搜索。我們對互聯網信息實時性的要求也越來越高,如果信息或消息延時幾分鐘后才更新,簡直讓人無法忍受。現在很多大公司(如Google、Facebook和Twitter)都在關注實時Web,并提供了實時性服務。實時Web是現在也將是未來最熱門的話題之一。

          [- -]  開源框架Pomelo實踐:搭建Web端高性能分布式IM聊天服務器

          [鏈接] http://www.52im.net/thread-849-1-1.html

          [摘要] Pomelo是來自網易公司的基于 Node.js 的高性能、分布式游戲服務器框架。它包括基礎的開發框架和相關的擴展組件(庫和工具包),可以幫助你省去游戲開發枯燥中的重復勞動和底層邏輯的開發。

          [- 9 -] 使用WebSocket和SSE技術實現Web端消息推送

          [鏈接] http://www.52im.net/thread-907-1-1.html

          [摘要] 請注意,本文要求熟悉 HTTP 服務器推送的語言和概念。兩個應用程序都是在 Python 中使用 CherryPy 編寫的。

          [- 10 -] 詳解Web端通信方式的演進:從Ajax、JSONP 到 SSE、Websocket

          [鏈接] http://www.52im.net/thread-1038-1-1.html

          [摘要] 這里我們將圍繞上述的幾種通信方式進行詳細的介紹。

          [- 11 -] MobileIMSDK-Web的網絡層框架為何使用的是Socket.io而不是Netty?

          [鏈接] http://www.52im.net/thread-1248-1-1.html

          [摘要] 本文要討論的是MobileIMSDK-Web的網絡層框架為何使用的是Socket.io而不是Netty。

          [- 12 -] 一文讀懂前端技術演進:盤點Web前端20年的技術變遷史

          [鏈接] http://www.52im.net/thread-2719-1-1.html

          [摘要] 我們經歷了前端的洪荒時代、Prototype時代、jQuery時代 、后jQuery時期、三大框架割據時代,這其中均是由國外開發者主導,直到如今的小程序時代,才是中國開發者獨創的。這是漫長的技術儲備下的成果,最終促成了良好的技術成長收獲。期間的前端發展之路,崎嶇艱難,本文將帶你回顧這個過程。

          [- 13 -] Web端即時通訊基礎知識補課:一文搞懂跨域的所有問題!

          [鏈接] http://www.52im.net/thread-2732-1-1.html

          [摘要] 本文將為你講解跨域問題原理,以及理論聯系實際,用實踐代碼也為你演示解決跨域問題的幾種方法。

          [- 14 -網頁端IM通信技術快速入門:短輪詢、長輪詢、SSE、WebSocket

          [鏈接] http://www.52im.net/thread-3555-1-1.html

          [摘要] 對于即時通訊網的im和消息推送這類即時通訊技術開發者來說,掌握WebSocket固然很重要,但了解短輪詢、長輪詢等這些所謂的Web端即時通訊“老技術”仍然大有裨益,這也正是整理分享本文的重要原因。

          [- 15 -] 搞懂現代Web端即時通訊技術一文就夠:WebSocket、socket.io、SSE

          [鏈接] http://www.52im.net/thread-3695-1-1.html

          [摘要] 本文將專門介紹WebSocket、socket.io、SSE這幾種現代的Web端即時通訊技術,從適用場景到技術原理,通俗又不失深度的文字,特別適合對Web端即時通訊技術有一定了解,且想深入學習WebSocket等現代Web端“實時”通信技術,卻又不想花時間去深讀枯燥的IETF技術手冊的讀者。

          ??52im社區本周新文:《網絡編程懶人入門(十五):外行也能讀懂的網絡硬件設備功能原理速成 http://www.52im.net/thread-4188-1-1.html》,歡迎閱讀!??

          posted @ 2023-04-21 13:49 Jack Jiang 閱讀(83) | 評論 (0)編輯 收藏

          一、基本介紹

          MobileIMSDK - 微信小程序端是一套基于微信原生 WebSocket 的即時通訊庫:

          • 1)超輕量級、無任何第 3 方庫依賴(開箱即用);
          • 2)純 JS 編寫、ES6 語法、高度提煉,簡單易用;
          • 3)基于微信原生 WebSocket API,簡潔優雅;
          • 4)支持運行于任何支持微信小程序的手機端;
          • 5)能與 MobileIMSDK 的各種客戶端完美互通;
          • 6)可應用于微信小程序中的消息推送、客服聊天、企業 OA、IM 等場景。

          二、與 MobileIMSDK 的關系

          MobileIMSDK - 微信小程序端是基于微信原生 WebSocket 協議的 MobileIMSDK 配套客戶端庫。

          MobileIMSDK 是一套專為移動端開發的開源原創 IM 通信層框架:

          • 歷經 8 年、久經考驗;
          • 超輕量級、高度提煉,lib 包 50KB 以內;
          • 精心封裝,一套 API 同時支持 UDPTCP、WebSocket 三種協議(可能是全網唯一開源的);
          • 客戶端支持 iOS、Android、標準 Java、H5、小程序、Uniapp(開發中..);
          • 服務端基于 Netty,性能卓越、易于擴展;??
          • 可與姊妹工程 MobileIMSDK-Web 無縫互通實現網頁端聊天或推送等;??
          • 可應用于跨設備、跨網絡的聊天 APP、企業 OA、消息推送等各種場景。

          以下是 MobileIMSDK 的最新通信架構圖:

          PS:MobileIMSDK 的客戶端庫一直在持續開發和升級中,目前 基于 Uniapp 的 MobileIMSDK 客戶端正在開發中 。

          三、設計目標

          直接使用原生的微信小程序 WebSocket 有以下問題和劣勢:

          • 1)功能有限:沒有心跳?;?、斷線重連、消息送達保證(重傳和去重)等即時通訊關鍵算法和邏輯;
          • 2)API 簡陋:在如此有限的原生 API 下,能邏輯清晰地實現并組合心跳?;睢嗑€重連、消息送達保證等算法,需要相當高的技術掌控力;
          • 3)邏輯耦合:經驗欠缺的開發人員,會將 WebSocket 通信與前端 UI 界面代碼混在一起,使得 UI 界面的重構、維護、改版都非常困難。

          針對以上問題,而 MobileIMSDK - 微信小程序端庫將讓開發者專注于 UI 應用層的開發,網絡通信層的專業代碼交由 SDK 開發人員,從而解偶 UI 前端和通信層的邏輯耦合性,大大降低技術復雜性。

          MobileIMSDK - 微信小程序端庫的設計目標是為您的開發帶來以下便利:

          • 1)界面與通信解偶:UI 界面與網絡通信代碼解耦,UI 界面的重構、維護、改版都非常容易和優雅;
          • 2)輕量級和兼容性:受益于堅持原生微信小程序 WebSocket API,簡潔輕量,無需任何額外依賴;
          • 3)核心內聚和收斂:得益于長期的提煉和經驗積累,SDK 核心層高度封裝,開發者無需理解復雜算法即可簡單上手。
          • 4)純 JS 輕量級實現:SDK 為純 JS 編寫、ES6 語法,無重量級框架和庫依賴,可干凈利落地對接各種既有系統。

          四、技術亮點

          • 輕量易使用:超輕量級 —— 純 JS 編寫且無任何第 3 方庫依賴,高度提煉 —— 簡單易用;
          • 代碼現代感:盡可能優先使用 ES6 語法,摒棄舊式 JS 語法的年代感;
          • 兼容性很好:基于微信原生 WebSocket API,可很好地運行于支持微信小程序的手機端;
          • 斷網恢復能力:擁有網絡狀況自動檢測、斷網自動治愈的能力;
          • 送達保證機制:完善的 QoS 消息送達保證機制(多重保障),不漏過每一條消息;
          • 通信協議封裝:實現了一個對上層透明的即時通訊通信協議模型;
          • 身份認證機制:實現了簡單合理的身份認證機制;
          • 完善的 log 信息:在開發調試階段,確保每一個算法關鍵步驟都有日志輸出,讓您的運行調試更為便利;
          • 界面代碼解耦:實現了 UI 界面代碼與 SDK 網絡通信代碼解偶,防止界面代碼跟 IM 核心代碼混在一起,不利于持續升級、重用和維護;
          • 聊天協議兼容:實現了與 MobileIMSDK 各種客戶端完全兼容的協議模型。

          五、文件組成

          SDK代碼文件概覽:

          SDK代碼文件用途說明:

          六、技術交流 

          學習和資料:點擊進入、bug和建議:點擊進入

          七、Demo運行截圖

          1)Demo的真機運行效果和功能說明圖:

          2)Demo在模擬器下的運行效果:

          3)Demo真機運行實拍圖:

          八、詳盡開發者手冊

          ① 開發者手冊(網頁版):MobileIMSDK的微信小程序端開發快速入門 

          ② 開發者手冊(PDF精編版):

           

          九、引用資料

          [1] 微信小程序開發者手冊
          [2] MobileIMSDK開源框架的API文檔
          [3] MobileIMSDK開源IM框架源碼Github地址點此
          [4] 開源輕量級 IM 框架 MobileIMSDK 的微信小程序端已發布
          [5] 開源即時通訊框架MobileIMSDK的微信小程序端開發者手冊

          posted @ 2023-04-20 10:33 Jack Jiang 閱讀(73) | 評論 (0)編輯 收藏

          本文由黃工首先發表于strongerHuang公眾號,原題“網絡硬件的發展史”,本文有修訂。

          1、引言

          本文是《網絡編程懶人入門》系列文章的第15篇,本篇將繼續以通俗易懂的文字,幫你無腦理解各種基礎網絡硬件設備的功能原理。

          本文不羅列復雜、全面的計算機網絡理論,目的是讓閱讀者脫離以往計算機理論專著的枯燥內容,在寓教于樂的語言文字中輕松快速的掌握這些知識,適合入門者,計網大佬和網絡編程老油條們請略過。

          學習交流:

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

          2、如何連接個人計算機(PC)?

          在發明網絡之前,個人計算機之間是獨立工作的,沒有網卡、網線或協議棧,主要使用磁盤、CD 和其他東西來傳輸數據。

          后來,網線出現了。

          最小的網絡單元由網線、網卡和協議棧組成:

          • 1)網線起著物理介質的作用,以傳輸比特流 / 電信號;
          • 2)網卡將轉換數據(例如:它將計算機存儲的數據轉換為網線的比特流 / 電信號);
          • 3)協議棧作為一種通信語言,可以在通信過程中實現數據分析、地址尋址和流控制。

          3、網線不夠長怎么辦?

          如果終端之間的距離太遠,一旦超過網線物理傳輸距離的上限,數據就會開始丟失。

          中繼器是物理層的設備,可以中繼和放大信息以實現設備的遠距離傳輸。

           

          4、中繼器端口不足怎么辦?

          中繼器通常只有兩個接口,這意味著如果網絡中有三個以上的終端主機,則無法實現多個主機之間的直接數據通信。

          集線器是一種多接口中繼器,也是一個物理層設備。它可以中繼和放大信息,從任何接口接收的數據都將被發送到所有其他接口。

          5、如何有選擇性的發送數據?

          有人把網橋比喻成一個 “聰明” 的中繼器。因為中繼器只是對所接收的信號進行放大,然后直接發送到另一個端口連接的電纜上,主要用于擴展網絡的物理連接范圍。

          而網橋除了可以擴展網絡的物理連接范圍外,還可以對 MAC 地址進行分區,隔離不同物理網段之間的碰撞(也就是隔離 “沖突域”)。

          6、速度不夠快怎么辦?

          交換機可以記錄該終端主機的 MAC 地址,并生成一個 MAC 表。MAC 表相當于一個 “map”,交換機根據 MAC 表在主機之間轉發數據流。

          交換機基于網橋進行擴展和升級。

          與網橋相比,交換機具有以下優點:

          • 1)接口數量更密集(每個主機位于一個獨立的沖突域中,帶寬利用率大大提高);
          • 2)使用專用的 ASIC 硬件芯片進行高速轉發;
          • 3)VLAN 隔離(不僅可以隔離沖突域,還可以通過 VLAN 隔離廣播域)。

          交換機是一種局域網設備,通常用于局域網,不能實現遠程廣域網通信。

          7、距離還不夠怎么辦?

          世界上第一臺路由器是由斯坦福大學的 Leonard Bossack 和 Santi Lerner 這對教師夫婦為斯坦福大學校園網絡 (SUNet) 和思科公司發明的。

          ▲ 思科公司創始人Leonard Bossack 和 Santi Lerner 夫婦

          路由器是一種基于 IP 尋址的網絡層設備,利用路由表來實現數據轉發。路由器主要用于連接不同的局域網以實現廣播域隔離,也可以用于遠程通信,如廣域網連接。

          諸如 IP 協議之類的邏輯尋址機制是實現不同類型局域網連接的關鍵。不同局域網的主機只要具有邏輯地址(IP 地址)和合理的邏輯地址規劃(網段規劃),它們就可以通信。

          路由器的誕生是互聯網爆炸的主要原因,跨媒介、跨地域的網絡集成已成為現實。

          8、接線太麻煩怎么辦?

          無線 AP可以被視為具有無線功能的交換機 / 路由器。隨著無線城市和移動辦公的發展趨勢,無線產品在網絡中所占的比例正在增加。

          根據部署方式的不同,可以分為胖 AP 和瘦 AP 解決方案。

          1)在胖 AP 方案中,無線 AP 具有獨立的操作系統,該操作系統可以獨立調試無線熱點的所有配置,類似于家用 Tp-link 產品。

          2)在瘦 AP 方案中,無線 AP 僅具有無線信號傳輸功能,所有命令調試都集中在后臺的 AC / 無線控制器上。

          小型無線網絡(家庭、小型企業)可以使用胖 AP 解決,而大型無線網絡(無線城市、無線園區網絡)則需要使用瘦 AP(AC + AP)解決。

          9、不夠安全怎么辦?

          防火墻是一種用于限制網絡安全訪問的網絡安全產品,通常用于 Internet 的邊緣,以防止外部黑客的攻擊。

          根據防火墻的技術特點,可以分為包過濾、應用代理和狀態檢測防火墻。根據產品形式,可以分為軟件防火墻和硬件防火墻。

          防火墻可視為具有安全功能的路由器。早期的防火墻在路由器的基礎上增加了訪問控制功能,因此在路由器上可以看到許多防火墻的功能,例如路由協議、訪問控制列表、地址轉換技術等。

          防火墻和路由器可以同時存在于網絡中。例如,防火墻可以放置在路由器之前或之后。在這種情況下,路由器側重于地址轉換和路由策略,而防火墻側重于安全隔離等。

          在防火墻的基礎上,擴展出了 Web 防火墻、安全網關和入侵檢測 / 入侵防御等安全產品。

          10、網絡擁塞怎么辦?

          網絡中的流量控制設備主要分為:

          • 1)上網行為管理;
          • 2)負載均衡器 / 應用交付;
          • 3)鏈路優化;
          • ... ...

          上網行為管理產品主要關注細粒度的區分和流量控制。

          負載平衡 / 應用程序交付側重于流量的負載平衡(根據流量特征、應用程序、地址等進行區分,然后分配到不同的鏈接和服務器)。

          鏈接優化主要用于廣域網等低速鏈路的邊界,以使鏈路利用率最大化。

          問題來了:組成一個網絡需要多少種設備?

          11、家庭 SOHO 網絡

          這是一個典型的家庭網絡,它通過無線路由器提供 WiFi 熱點訪問,并提供路由器連接到外部網絡。

          12、小型企業網絡

          小型企業網絡使用二層架構、單核拓撲,需要路由器、交換機和服務器。

          13、園區網

          最常見的園區網架構,如大中型企業網絡 / 校園網絡,采用接入匯聚核三層架構和雙核組網。

          根據網絡需求,分為:

          • 1)用戶區;
          • 2)內部服務區;
          • 3)外部服務區;
          • 4)管理區;
          • 5)Internet 區;
          • ... ...

          它們通過核心交換機和防火墻連接并隔離。

          互聯網使用多出口連接,通過路由器實現撥號和 NAT,通過流量控制設備實現負載均衡 / 上網行為管理,通過防火墻實現安全隔離。

          14、數據中心網絡

          上圖是典型的大型第二層數據中心網絡 / IDC 設計。

          主要分為:

          • 1)租戶區(服務集群);
          • 2)Internet 區;
          • 3)安全管理區域。

          租戶區:采用設備虛擬化和鏈路虛擬化技術,提高設備處理能力和鏈路承載能力,并將負載均衡器放置在服務器區域中,以合理有效的方式將流量分配給固定服務器。

          Internet 出口區域:使用路由器執行 BGP 和地址反轉,使用 IPS / anti-DDoS 設備進行大流量泛洪攻擊,使用流量控制執行出口負載,并使用防火墻進行安全隔離。

          安全管理區:通過防火墻安全訪問,通過審計、日志、入侵檢測、網絡管理等產品對整個網絡進行管理。

          15、系列文章

          本文是系列文章中的第15篇,本系列文章的大綱如下:

          [1] 網絡編程懶人入門(一):快速理解網絡通信協議(上篇)

          [2] 網絡編程懶人入門(二):快速理解網絡通信協議(下篇)

          [3] 網絡編程懶人入門(三):快速理解TCP協議一篇就夠

          [4] 網絡編程懶人入門(四):快速理解TCP和UDP的差異

          [5] 網絡編程懶人入門(五):快速理解為什么說UDP有時比TCP更有優勢

          [6] 網絡編程懶人入門(六):史上最通俗的集線器、交換機、路由器功能原理入門

          [7] 網絡編程懶人入門(七):深入淺出,全面理解HTTP協議

          [8] 網絡編程懶人入門(八):手把手教你寫基于TCP的Socket長連接

          [9] 網絡編程懶人入門(九):通俗講解,有了IP地址,為何還要用MAC地址?

          [10] 網絡編程懶人入門(十):一泡尿的時間,快速讀懂QUIC協議

          [11] 網絡編程懶人入門(十一):一文讀懂什么是IPv6

          [12] 網絡編程懶人入門(十二):快速讀懂Http/3協議,一篇就夠!

          [13] 網絡編程懶人入門(十三):一泡尿的時間,快速搞懂TCP和UDP的區別

          [14] 網絡編程懶人入門(十四):到底什么是Socket?一文即懂!

          [15] 網絡編程懶人入門(十五):外行也能讀懂的網絡硬件設備功能原理速成(* 本文)

          16、參考資料

          [1] 快速理解網絡通信協議(上篇)

          [2] 快速理解網絡通信協議(下篇)

          [3] 假如你來設計網絡,會怎么做?

          [4] 史上最通俗的集線器、交換機、路由器功能原理入門

          [5] 面視必備,史上最通俗計算機網絡分層詳解

          [6] 技術往事:改變世界的TCP/IP協議(珍貴多圖、手機慎點)

          [7] P2P技術詳解(一):NAT詳解——詳細原理、P2P簡介

          [8] 通俗講解,有了IP地址,為何還要用MAC地址?

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

          posted @ 2023-04-18 11:07 Jack Jiang 閱讀(90) | 評論 (0)編輯 收藏

          僅列出標題
          共50頁: First 上一頁 12 13 14 15 16 17 18 19 20 下一頁 Last 
          Jack Jiang的 Mail: jb2011@163.com, 聯系QQ: 413980957, 微信: hellojackjiang
          主站蜘蛛池模板: 类乌齐县| 平塘县| 普陀区| 吉安市| 石城县| 昌都县| 永兴县| 永平县| 铁力市| 都昌县| 诸城市| 兴山县| 新兴县| 彭山县| 湖南省| 德钦县| 叙永县| 遂昌县| 东光县| 墨脱县| 临湘市| 海宁市| 徐州市| 阿勒泰市| 定西市| 翁源县| 安国市| 昭平县| 靖宇县| 渭南市| 长兴县| 浏阳市| 错那县| 杭锦后旗| 南川市| 台江县| 景泰县| 芜湖县| 卢氏县| 临湘市| 厦门市|