posted @ 2023-05-11 11:55 Jack Jiang 閱讀(125) | 評(píng)論 (0) | 編輯 收藏
posted @ 2023-05-06 11:21 Jack Jiang 閱讀(95) | 評(píng)論 (0) | 編輯 收藏
為了更好地分類(lèi)閱讀52im.net 總計(jì)1000多篇精編文章,我將在每周三推送新的一期技術(shù)文集,本次是第14 期。
[- 1 -] 新手快速入門(mén):WebSocket簡(jiǎn)明教程
[鏈接] http://www.52im.net/thread-831-1-1.html
[摘要] 通俗的講,WebSocket 是一種新的網(wǎng)絡(luò)通信協(xié)議,現(xiàn)在瀏覽器端很多高級(jí)功能都需要用到它。本文將以通俗易懂的方式介紹 WebSocket 協(xié)議的使用方法,適合初學(xué)者快速入門(mén)之用。
[- 2 -] WebSocket從入門(mén)到精通,半小時(shí)就夠!
[鏈接] http://www.52im.net/thread-3134-1-1.html
[摘要] 本文也是一篇關(guān)于WebSocket從入門(mén)到精通的文章,內(nèi)容由淺入深,比較適合想要在短時(shí)間內(nèi)較深入的了解WebSocket協(xié)議的開(kāi)發(fā)者學(xué)習(xí)。
[- 3 -] WebSocket詳解(一):初步認(rèn)識(shí)WebSocket技術(shù)
[鏈接] http://www.52im.net/thread-331-1-1.html
[摘要] HTML5規(guī)范在傳統(tǒng)的web交互基礎(chǔ)上為我們帶來(lái)了眾多的新特性,隨著web技術(shù)被廣泛用于web APP的開(kāi)發(fā),這些新特性得以推廣和使用,而websocket作為一種新的web通信技術(shù)具有巨大意義。本文將帶您認(rèn)識(shí)WebSocket。
[- 4 -] WebSocket詳解(二):技術(shù)原理、代碼演示和應(yīng)用案例
[鏈接] http://www.52im.net/thread-326-1-1.html
[摘要] 本文將簡(jiǎn)要介紹 WebSocket 的由來(lái)、原理機(jī)制以及服務(wù)端/客戶端實(shí)現(xiàn),并以實(shí)際客戶案例指導(dǎo)并講解了如何使用 WebSocket 解決實(shí)時(shí)響應(yīng)及服務(wù)端消息推送方面的問(wèn)題。
[- 5 -] WebSocket詳解(三):深入WebSocket通信協(xié)議細(xì)節(jié)
[鏈接] http://www.52im.net/thread-332-1-1.html
[摘要] ebSocket 是HTML5一種新的web通信技術(shù),它真正實(shí)現(xiàn)了瀏覽器與服務(wù)器的全雙工實(shí)時(shí)通信(full-duplex)。本文將詳解介紹WebSocket的通信協(xié)議細(xì)節(jié)。
[- 6 -] WebSocket詳解(四):刨根問(wèn)底HTTP與WebSocket的關(guān)系(上篇)
[鏈接] http://www.52im.net/thread-1258-1-1.html
[摘要] 因本文有點(diǎn)長(zhǎng),所以分成了上下兩篇,本文將首先以通俗易懂的語(yǔ)言著重介紹HTTP協(xié)議,下篇中再展開(kāi)WebSocket協(xié)議相關(guān)的文字。
[- 7 -] WebSocket詳解(五):刨根問(wèn)底HTTP與WebSocket的關(guān)系(下篇)
[鏈接] http://www.52im.net/thread-1266-1-1.html
[摘要] 本文的上篇《WebSocket詳解(四):刨根問(wèn)底HTTP與WebSocket的關(guān)系(上篇)》介紹了HTTP1.1協(xié)議的基本內(nèi)容,這篇文章將繼續(xù)分析WebSocket協(xié)議,然后對(duì)這兩個(gè)進(jìn)行簡(jiǎn)單的比較。
[- 8-] WebSocket詳解(六):刨根問(wèn)底WebSocket與Socket的關(guān)系
[鏈接] http://www.52im.net/thread-1273-1-1.html
[摘要] 目前網(wǎng)上全面介紹這兩種協(xié)議的中文文章并不多,或者說(shuō)不夠全面。我無(wú)法找到一篇文章能解決上面的所有問(wèn)題。因此,我寫(xiě)了本文,把找到的 Socket 和 WebSocket 的相關(guān)資料做一個(gè)梳理,以方便理解。
[- 9 -] WebSocket硬核入門(mén):200行代碼,教你徒手?jǐn)]一個(gè)WebSocket服務(wù)器
[鏈接] http://www.52im.net/thread-3175-1-1.html
[摘要] 本文分享了自已開(kāi)發(fā)一個(gè)WebSocket服務(wù)端實(shí)現(xiàn)過(guò)程中需要的知識(shí)儲(chǔ)備,以及具體的代碼實(shí)現(xiàn)含義等,非常適合想在短時(shí)間內(nèi)對(duì)WebSocket協(xié)議從入門(mén)到精通的Web端即時(shí)通訊開(kāi)發(fā)者閱讀。
[- 10 -] Web端即時(shí)通訊安全:跨站點(diǎn)WebSocket劫持漏洞詳解(含示例代碼)
[鏈接] http://www.52im.net/thread-793-1-1.html
[摘要] 本文將深入淺出為讀者介紹跨站點(diǎn) WebSocket 漏洞的原理、檢測(cè)方法和修復(fù)方法,希望能幫助廣大讀者在實(shí)際工作中避免這個(gè)已知安全漏洞。
[鏈接] http://www.52im.net/thread-3539-1-1.html
[摘要] 本文分享了愛(ài)奇藝基于Netty實(shí)現(xiàn)WebSocket長(zhǎng)連接實(shí)時(shí)推送網(wǎng)關(guān)時(shí)的實(shí)踐經(jīng)驗(yàn)總結(jié)。
[- 12 -] Web端即時(shí)通訊實(shí)踐干貨:如何讓你的WebSocket斷網(wǎng)重連更快速?
[鏈接] http://www.52im.net/thread-3098-1-1.html
[摘要] 本文將基于筆者的開(kāi)發(fā)實(shí)踐,分享WebSocket在不同狀態(tài)下、不同的網(wǎng)絡(luò)場(chǎng)景下,應(yīng)該如何實(shí)現(xiàn)快速斷網(wǎng)重連。
[- 13 -] 理論聯(lián)系實(shí)際:從零理解WebSocket的通信原理、協(xié)議格式、安全性
[鏈接] http://www.52im.net/thread-1341-1-1.html
[摘要] 本文由淺入深,介紹了WebSocket如何建立連接、交換數(shù)據(jù)的細(xì)節(jié),以及數(shù)據(jù)幀的格式。此外,還簡(jiǎn)要介紹了針對(duì)WebSocket的安全攻擊,以及協(xié)議是如何抵御類(lèi)似攻擊的。
[- 14 -] 微信小程序中如何使用WebSocket實(shí)現(xiàn)長(zhǎng)連接(含完整源碼)
[鏈接] http://www.52im.net/thread-1703-1-1.html
[摘要] 這篇文章分享了一個(gè)基于WebSocket長(zhǎng)連接的微信小程序——簡(jiǎn)單的剪刀石頭布小游戲的制作過(guò)程,希望能對(duì)想要在微信小程序中使用 WebSocket 的開(kāi)發(fā)者有所幫助。
[- 15 -] 八問(wèn)WebSocket協(xié)議:為你快速解答WebSocket熱門(mén)疑問(wèn)
[鏈接] http://www.52im.net/thread-2488-1-1.html
[摘要] 本文將從8個(gè)常見(jiàn)的疑問(wèn)入手,為還不了解WebSocket協(xié)議的開(kāi)發(fā)者快速普及相關(guān)知識(shí),從而節(jié)省您學(xué)習(xí)WebSocket的時(shí)間。
??52im社區(qū)本周新文:《IM開(kāi)發(fā)干貨分享:IM客戶端不同版本兼容運(yùn)行的技術(shù)思路和實(shí)踐總結(jié) http://www.52im.net/thread-4202-1-1.html》,歡迎閱讀!??
我是Jack Jiang,我為自已帶鹽!https://github.com/JackJiang2011/MobileIMSDK/
posted @ 2023-05-04 13:45 Jack Jiang 閱讀(84) | 評(píng)論 (0) | 編輯 收藏
本文由鞏鵬軍分享,原題“IM兼容性基建”,本文有修訂。
1、引言
一個(gè)成熟的IM成品,在運(yùn)營(yíng)過(guò)程中隨著時(shí)間的推移,會(huì)發(fā)布不同的版本,但為了用戶體驗(yàn)并不能強(qiáng)制要求用戶必須升級(jí)到最新版本,而服務(wù)端此時(shí)已經(jīng)是最新版本了,所以為了讓這些不同客戶端版本的用戶都能正常使用(尤其IM這種產(chǎn)品,不同版本可能通信協(xié)議都會(huì)有變動(dòng),這就更要命了),則必須要針對(duì)不同客戶端版本的兼容處理。
本文將基于筆者的IM產(chǎn)品開(kāi)發(fā)和運(yùn)營(yíng)實(shí)踐,為你分享如何實(shí)現(xiàn)不同APP客戶端版本與服務(wù)端通信的兼容性處理方案。
學(xué)習(xí)交流:
- 移動(dòng)端IM開(kāi)發(fā)入門(mén)文章:《新手入門(mén)一篇就夠:從零開(kāi)發(fā)移動(dòng)端IM》
- 開(kāi)源IM框架源碼:https://github.com/JackJiang2011/MobileIMSDK(備用地址點(diǎn)此)
(本文已同步發(fā)布于:http://www.52im.net/thread-4202-1-1.html)
2、關(guān)于作者

鞏鵬軍:專(zhuān)注移動(dòng)開(kāi)發(fā)十多年,熱愛(ài)即時(shí)通訊技術(shù)。個(gè)人微信公眾號(hào):“鞏鵬軍”。
作者在即時(shí)通訊網(wǎng)分享的另一篇《知識(shí)科普:IM聊天應(yīng)用是如何將消息發(fā)送給對(duì)方的?(非技術(shù)篇)》,感興趣的讀者也可以看看。
3、一個(gè)App時(shí)怎么辦?
提示:“一個(gè)App”指的是同一個(gè)IM服務(wù)端,只服務(wù)于一個(gè)特定的IM產(chǎn)品。
首先想到的就是直接使用App版本號(hào)判斷新老版本并進(jìn)行兼容處理。
如下圖所示:

一般來(lái)說(shuō),不同的IM客戶端(如iOS、Android、Windows、Mac)都是同步迭代,多端發(fā)版時(shí)間一致,App版本號(hào)也一樣。
所以用跨多端的App版本號(hào)可以很容易地讓服務(wù)端只用寫(xiě)一遍判斷和兼容邏輯。
示例:假設(shè)從V2.1.0開(kāi)始應(yīng)用紅包消息,那么判斷客戶端是否支持紅包的邏輯就很簡(jiǎn)單。
偽代碼如下:
booleanisSupportRedEnvelop(String appVersion) {
returngte(appVersion, "2.1.0");
}
附:版本號(hào)比對(duì)邏輯(未充分考慮異常情況):
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、多個(gè)App時(shí)怎么辦?
4.1概述
提示:“多個(gè)App”指的是同一個(gè)IM服務(wù)端,可能作為通用服務(wù),作為多個(gè)不同APP產(chǎn)品中的聊天模塊使用的場(chǎng)景。
只有一個(gè)App時(shí)肯定是比較簡(jiǎn)單的。但現(xiàn)實(shí)情況是一套IM系統(tǒng)通常會(huì)用于多個(gè)業(yè)務(wù)場(chǎng)景,這是很普遍的現(xiàn)象。業(yè)界的知名IM產(chǎn)品,比如釘釘、飛書(shū)、企業(yè)微信、美團(tuán)大象等都是這樣。
底層邏輯大概是:IM系統(tǒng)比較復(fù)雜,功能繁多而且難以實(shí)現(xiàn)、更難以穩(wěn)定,所以一個(gè)IM團(tuán)隊(duì)維護(hù)一套IM系統(tǒng),然后應(yīng)用在多個(gè)業(yè)務(wù)場(chǎng)景就是最具性?xún)r(jià)比的選擇了。
4.2使用App版本
每個(gè)業(yè)務(wù)場(chǎng)景都會(huì)有自己的客戶端App,每個(gè)App都有自己的版本號(hào),那么根據(jù)App版本號(hào)判斷新老版本的邏輯就不適用了(如下圖所示)。

一個(gè)App時(shí)可以這樣做兼容性判斷:
booleanisSupportRedEnvelop(String appVersion) {
returngte(appVersion, "2.1.0");
}
多個(gè)App時(shí)的兼容性判斷:
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版本號(hào)的麻煩
隨著App的增多,需要的判斷也越多,這會(huì)很麻煩,也很容易出錯(cuò)。
每個(gè)App推出新版本后,用戶不可能瞬間就升級(jí)到最新版本,根據(jù)經(jīng)驗(yàn),每個(gè)App往往都會(huì)同時(shí)存在十個(gè)以上的不同版本。
這就會(huì)形成如下圖所示的局面:

5、多個(gè)App時(shí),可將IM能力提煉為一套公用代碼
多個(gè)App時(shí)的問(wèn)題總結(jié)起來(lái)就是:一套服務(wù)端代碼如何適應(yīng)集成了不同IM能力的不同App客戶端?
我們來(lái)具體舉例分析一下,假設(shè)一個(gè)IM團(tuán)隊(duì)維護(hù)的IM相關(guān)的客戶端模塊有IM Client SDK、聯(lián)系人、長(zhǎng)連接、朋友圈等四個(gè)模塊(如下圖所示)。

如上圖所示:
- 1)App 1:集成了全部四個(gè)模塊;
- 2)App 2:只集成了三個(gè)模塊;
- 3)App 3:只集成了三個(gè)模塊。
因?yàn)槿齻€(gè)App面向的客戶群不同,發(fā)版節(jié)奏不同,所以各自集成的IM的能力也不同。
比如下面這樣:
- 1)App 1:面向內(nèi)部員工辦公溝通使用的App 1需要功能豐富,對(duì)于穩(wěn)定性和Bug有一定的包容性,也容易溝通和修復(fù)再發(fā)版;
- 2)App 2:面向客服場(chǎng)景,用于企業(yè)的客服專(zhuān)員和企業(yè)的C端用戶溝通解決客訴問(wèn)題,對(duì)于穩(wěn)定性要求高,C端用戶升級(jí)率不好控制,發(fā)版節(jié)奏慢,最快只能和主業(yè)務(wù)App一致;
- 3)App 3:面向企業(yè)和B端供應(yīng)商,比如美團(tuán)和美團(tuán)上的商戶,京東和京東平臺(tái)上的第三方商家,對(duì)于穩(wěn)定性要求也比較高,B端商家的升級(jí)率好控制一點(diǎn),發(fā)版節(jié)奏也可以快一些。
從上圖可以看出,因?yàn)镮M核心能力是同一個(gè)團(tuán)隊(duì)維護(hù),所以Core包含的多個(gè)模塊的代碼必然是只有一套源代碼。不同App只是Core集成打包出來(lái)的產(chǎn)物,或者說(shuō)不同App只是Core外面套了不同的殼而已,只要Core一樣,則App的IM能力就一樣(這就是本節(jié)標(biāo)題所述的“多個(gè)App時(shí),可將IM能力提煉為一套公用的代碼”這個(gè)意思)。
6、給每個(gè)App中使用的公用代碼(Core)一個(gè)版本號(hào)
如上節(jié)所述,我們將IM能力提煉為一套公用代碼(以下內(nèi)容簡(jiǎn)稱(chēng)“Core”)。
那么,我們能不能給Core一個(gè)版本標(biāo)識(shí)呢?
答案是肯定的:

站在App的角度,每個(gè)App相當(dāng)于打上了Core版本標(biāo)簽:

7、如何正確地解讀Core版呢?
7.1拋開(kāi)App看Core版本
如果不看App版本,只看Core版本標(biāo)簽:

7.2從一套服務(wù)端代碼看Core版本
同一個(gè)IM團(tuán)隊(duì),其IM Servers必然也是同一套代碼集,不考慮部署的區(qū)別。
那么上圖邏輯上等價(jià)于下圖:

7.3使用Core版本的兼容性判斷
站在Core的視角,多個(gè)App就像單個(gè)App類(lèi)似,只是使用的版本標(biāo)識(shí)不同。
具體如下:
- 1)單個(gè)App時(shí),IM服務(wù)端要區(qū)分不同App版本;
- 2)多個(gè)App時(shí),IM服務(wù)端要區(qū)分不同Core版本。
還拿是否支持紅包的判斷舉例。
一個(gè)App時(shí):
booleanisSupportRedEnvelop(String appVersion){
returngte(appVersion, "2.1.0");
}
多個(gè)App時(shí):
booleanisSupportRedEnvelop(Integer coreVersion){
returncoreVersion >= 2;
}
通過(guò)Core版本號(hào),我們可以把兼容邏輯判斷簡(jiǎn)化到和單個(gè)App一樣的簡(jiǎn)單。
8、關(guān)于Core版本的命名和取值
關(guān)于Core版本號(hào)的取值,有下列可能的選項(xiàng):
- 選項(xiàng)一:語(yǔ)義版本號(hào) 1.2.0;
- 選項(xiàng)二:整數(shù) 自然數(shù) 1 2 3;
- 選項(xiàng)三:整數(shù) 迭代日期 20220819 或 220819。
因?yàn)镃ore版本號(hào)不用給最終用戶看的,無(wú)需遵循常見(jiàn)的語(yǔ)義版本號(hào)規(guī)范。而且Core版本號(hào)只用于版本對(duì)比,所以整數(shù)會(huì)是一個(gè)比較好的選擇,方便比較,準(zhǔn)確可靠。
用自然數(shù) 1、 2、 3作為Core版本號(hào)是可以的,每個(gè)迭代發(fā)布新的Core版本時(shí)遞增一下就可以了。
但是考慮到有多個(gè)終端平臺(tái)iOS、Android、Windows、Mac,如果某個(gè)平臺(tái)的Core發(fā)布后發(fā)現(xiàn)小Bug需要HotFix,那么要遞增版本號(hào),就會(huì)擠占其它端的下一個(gè)自然數(shù)。究其原因,在于自然數(shù)是連續(xù)的,沒(méi)辦法在兩個(gè)常規(guī)的版本間插入一個(gè)HotFix版本。

選項(xiàng)三就可以解決這個(gè)問(wèn)題:因?yàn)镃ore的迭代發(fā)布日期是稀疏的,若干天后才會(huì)發(fā)布一個(gè)Core版本,那么當(dāng)某個(gè)端需要一個(gè)HotFix版本時(shí),選擇HotFix當(dāng)天的日期作為版本號(hào)即可。
總體上:多個(gè)端的主要版本號(hào)都是約定的統(tǒng)一的發(fā)布日期,多端一致,同時(shí)允許某個(gè)端臨時(shí)HotFix插入一個(gè)新的版本號(hào),保留彈性。
參考 Google 對(duì)Android SDK API版本的實(shí)踐,我們可以把Core版本號(hào)命名為core_level,取值為Core的發(fā)布日期的整數(shù)表示。
9、多個(gè)App情況下的其它版本標(biāo)識(shí)
1)platform:
一套Core,不同端在實(shí)際開(kāi)發(fā)中,可能存在差異,為了針對(duì)具體端進(jìn)行特定的兼容,需要知道當(dāng)前是哪個(gè)端,可以約定platform字段表示端。取值可以是:ios、android、win、mac、linux等。
2)App版本號(hào):
在IM相關(guān)邏輯的兼容性判斷中,只需使用跨App的多端一致的core_level了。但是為了和最終用戶、產(chǎn)品經(jīng)理等溝通方便,保留App版本號(hào)app_version用于人和人之間溝通交流。core_level主要用于研發(fā)工程師之間,還有工程師和程序之間的溝通。兩者各取所長(zhǎng)。
10、版本標(biāo)識(shí)的傳輸方式
每個(gè)API和每條長(zhǎng)連接數(shù)據(jù)包都攜帶Core版本,這樣服務(wù)端可以無(wú)狀態(tài)得處理每一個(gè)請(qǐng)求。如果需要在服務(wù)端主動(dòng)推送時(shí)區(qū)分目標(biāo)端的版本,可以在App登錄時(shí)將其攜帶的Core版本落庫(kù)存儲(chǔ),然后推送時(shí)查詢(xún)使用。
10.1短連接(HTTP)
HTTP短連接通過(guò)新增Header字段方式傳輸:
curl "https://{domain}/api/v1/xxx"\
-H "platform: ios"\
-H "app_version: 8.0.25"\
-H "core_level: 220819"
10.2長(zhǎng)連接(Socket)
長(zhǎng)連接SDK通過(guò)類(lèi)似HTTP Header的方式傳輸:
{
"platform":"ios",
"app_version":"8.0.25",
"core_level":"220819"
}
10.3短轉(zhuǎn)長(zhǎng)
短轉(zhuǎn)長(zhǎng)時(shí)HTTP Header會(huì)轉(zhuǎn)換為長(zhǎng)連接數(shù)據(jù)body里的header通過(guò)長(zhǎng)鏈傳遞。
這樣就同時(shí)存在長(zhǎng)連接header和長(zhǎng)連接body.header兩套字段,最終以長(zhǎng)連接body.header為準(zhǔn)即可。
10.4其它
IM系統(tǒng)里的瀏覽器和小程序,如果可以新增HTTP Header則新增Header傳輸,實(shí)在沒(méi)有辦法可以通過(guò)User-Agent傳輸該信息,服務(wù)端優(yōu)先解析Header,沒(méi)有找到時(shí)再解析User-Agent。
服務(wù)端解析UA的正則表達(dá)式:
/ platform\/(ios|android|mac|win|linux) app_version\/([0-9]\.[0-9]+\.[0-9]+) core_level\/([1-9][0-9]+)( |$)/
以上正則表達(dá)式在線運(yùn)行效果:點(diǎn)此查看。
11、本文小結(jié)
至此,我們找到了一個(gè)適用于多個(gè)App、多個(gè)子模塊、多個(gè)功能點(diǎn)、臨時(shí)BugFix的版本標(biāo)識(shí):Core版本號(hào),這樣就可以很好地解決多App的IM能力兼容性問(wèn)題。
以下是版本兼容性判斷偽碼:
booleanisSupportRedEnvelop(Integer coreLevel) {
returncoreLevel >= 220819;
}
12、參考資料
[2] Node.js ABI version number
[4] 零基礎(chǔ)IM開(kāi)發(fā)入門(mén)(一):什么是IM系統(tǒng)?
[5] 一套海量在線用戶的移動(dòng)端IM架構(gòu)設(shè)計(jì)實(shí)踐分享(含詳細(xì)圖文)
[6] 一套原創(chuàng)分布式即時(shí)通訊(IM)系統(tǒng)理論架構(gòu)方案
[7] 從零到卓越:京東客服即時(shí)通訊系統(tǒng)的技術(shù)架構(gòu)演進(jìn)歷程
[8] 一套億級(jí)用戶的IM架構(gòu)技術(shù)干貨(上篇):整體架構(gòu)、服務(wù)拆分等
[9] 基于實(shí)踐:一套百萬(wàn)消息量小規(guī)模IM系統(tǒng)技術(shù)要點(diǎn)總結(jié)
[10] 一套十萬(wàn)級(jí)TPS的IM綜合消息系統(tǒng)的架構(gòu)實(shí)踐與思考
[11] 從新手到專(zhuān)家:如何設(shè)計(jì)一套億級(jí)消息量的分布式IM系統(tǒng)
[12] 閑魚(yú)億級(jí)IM消息系統(tǒng)的架構(gòu)演進(jìn)之路
[13] 深度解密釘釘即時(shí)消息服務(wù)DTIM的技術(shù)設(shè)計(jì)
[14] 一套高可用、易伸縮、高并發(fā)的IM群聊、單聊架構(gòu)方案設(shè)計(jì)實(shí)踐
[15] 企業(yè)微信的IM架構(gòu)設(shè)計(jì)揭秘:消息模型、萬(wàn)人群、已讀回執(zhí)、消息撤回等
(本文已同步發(fā)布于:http://www.52im.net/thread-4202-1-1.html)
posted @ 2023-04-28 10:41 Jack Jiang 閱讀(84) | 評(píng)論 (0) | 編輯 收藏
為了更好地分類(lèi)閱讀52im.net 總計(jì)1000多篇精編文章,我將在每周三推送新的一期技術(shù)文集,本次是第13 期。
[- 1 -] 新手入門(mén)貼:史上最全Web端即時(shí)通訊技術(shù)原理詳解
[鏈接] http://www.52im.net/thread-338-1-1.html
[摘要] 本文的目的就是要詳細(xì)探討這些技術(shù)并分析其原理和過(guò)程。
[- 2 -] Web端即時(shí)通訊技術(shù)盤(pán)點(diǎn):短輪詢(xún)、Comet、Websocket、SSE
[鏈接] http://www.52im.net/thread-336-1-1.html
[摘要] 本文將簡(jiǎn)要介紹這4種技術(shù)的原理,并指出各自的異同點(diǎn)、優(yōu)缺點(diǎn)等。
[- 3 -] SSE技術(shù)詳解:一種全新的HTML5服務(wù)器推送事件技術(shù)
[鏈接] http://www.52im.net/thread-335-1-1.html
[摘要] 本文對(duì)服務(wù)器推送技術(shù)(SSE)進(jìn)行了詳細(xì)的介紹,包含瀏覽器端和服務(wù)器端的相應(yīng)實(shí)現(xiàn)細(xì)節(jié),為在實(shí)踐中使用該技術(shù)提供了指南。
[- 4 -]Comet技術(shù)詳解:基于HTTP長(zhǎng)連接的Web端實(shí)時(shí)通信技術(shù)
[鏈接] http://www.52im.net/thread-334-1-1.html
[摘要] 一般來(lái)說(shuō),Web端即時(shí)通訊技術(shù)因受限于瀏覽器的設(shè)計(jì)限制,一直以來(lái)實(shí)現(xiàn)起來(lái)并不容易,主流的Web端即時(shí)通訊方案大致有4種:傳統(tǒng)Ajax短輪詢(xún)、Comet技術(shù)、WebSocket技術(shù)、SSE(Server-sent Events)。本文將專(zhuān)門(mén)講解Comet技術(shù)。
[- 5 -] socket.io實(shí)現(xiàn)消息推送的一點(diǎn)實(shí)踐及思路
[鏈接] http://www.52im.net/thread-188-1-1.html
[摘要] 對(duì)于普通站點(diǎn)來(lái)說(shuō), 請(qǐng)求-響應(yīng)模式可以滿足絕大多數(shù)的功能需求,但總有某些功能我們希望能夠?yàn)橛脩籼峁?shí)時(shí)消息的體驗(yàn)。
[- 6 - ] LinkedIn的Web端即時(shí)通訊實(shí)踐:實(shí)現(xiàn)單機(jī)幾十萬(wàn)條長(zhǎng)連接
[鏈接] http://www.52im.net/thread-659-1-1.html
[摘要] 在這篇文章中會(huì)描述在我們收到了消息、分型指標(biāo)和讀回復(fù)之后,如何立刻把它們發(fā)往客戶端。內(nèi)容會(huì)包含我們是如何使用Play框架和Akka Actor Model來(lái)管理長(zhǎng)連接、由服務(wù)器主動(dòng)發(fā)送事件的。我們也會(huì)分享一些在生產(chǎn)環(huán)境中我們是如何在服務(wù)器上做負(fù)載測(cè)試,來(lái)管理數(shù)十萬(wàn)條并發(fā)長(zhǎng)連接的,還有一些心得。最后,我們會(huì)分享在整個(gè)過(guò)程中我們用到的各種優(yōu)化方法。
[- 7 -] Web端即時(shí)通訊技術(shù)的發(fā)展與WebSocket、Socket.io的技術(shù)實(shí)踐
[鏈接] http://www.52im.net/thread-690-1-1.html
[摘要] 為什么說(shuō)Web即時(shí)通訊技術(shù)這么重要?我們生活在一個(gè)實(shí)時(shí)(real-time)的世界中,因此Web的最終最自然的狀態(tài)也應(yīng)當(dāng)是實(shí)時(shí)的。用戶需要實(shí)時(shí)的溝通、數(shù)據(jù)和搜索。我們對(duì)互聯(lián)網(wǎng)信息實(shí)時(shí)性的要求也越來(lái)越高,如果信息或消息延時(shí)幾分鐘后才更新,簡(jiǎn)直讓人無(wú)法忍受。現(xiàn)在很多大公司(如Google、Facebook和Twitter)都在關(guān)注實(shí)時(shí)Web,并提供了實(shí)時(shí)性服務(wù)。實(shí)時(shí)Web是現(xiàn)在也將是未來(lái)最熱門(mén)的話題之一。
[- 8 -] 開(kāi)源框架Pomelo實(shí)踐:搭建Web端高性能分布式IM聊天服務(wù)器
[鏈接] http://www.52im.net/thread-849-1-1.html
[摘要] Pomelo是來(lái)自網(wǎng)易公司的基于 Node.js 的高性能、分布式游戲服務(wù)器框架。它包括基礎(chǔ)的開(kāi)發(fā)框架和相關(guān)的擴(kuò)展組件(庫(kù)和工具包),可以幫助你省去游戲開(kāi)發(fā)枯燥中的重復(fù)勞動(dòng)和底層邏輯的開(kāi)發(fā)。
[- 9 -] 使用WebSocket和SSE技術(shù)實(shí)現(xiàn)Web端消息推送
[鏈接] http://www.52im.net/thread-907-1-1.html
[摘要] 請(qǐng)注意,本文要求熟悉 HTTP 服務(wù)器推送的語(yǔ)言和概念。兩個(gè)應(yīng)用程序都是在 Python 中使用 CherryPy 編寫(xiě)的。
[- 10 -] 詳解Web端通信方式的演進(jìn):從Ajax、JSONP 到 SSE、Websocket
[鏈接] http://www.52im.net/thread-1038-1-1.html
[摘要] 這里我們將圍繞上述的幾種通信方式進(jìn)行詳細(xì)的介紹。
[- 11 -] MobileIMSDK-Web的網(wǎng)絡(luò)層框架為何使用的是Socket.io而不是Netty?
[鏈接] http://www.52im.net/thread-1248-1-1.html
[摘要] 本文要討論的是MobileIMSDK-Web的網(wǎng)絡(luò)層框架為何使用的是Socket.io而不是Netty。
[- 12 -] 一文讀懂前端技術(shù)演進(jìn):盤(pán)點(diǎn)Web前端20年的技術(shù)變遷史
[鏈接] http://www.52im.net/thread-2719-1-1.html
[摘要] 我們經(jīng)歷了前端的洪荒時(shí)代、Prototype時(shí)代、jQuery時(shí)代 、后jQuery時(shí)期、三大框架割據(jù)時(shí)代,這其中均是由國(guó)外開(kāi)發(fā)者主導(dǎo),直到如今的小程序時(shí)代,才是中國(guó)開(kāi)發(fā)者獨(dú)創(chuàng)的。這是漫長(zhǎng)的技術(shù)儲(chǔ)備下的成果,最終促成了良好的技術(shù)成長(zhǎng)收獲。期間的前端發(fā)展之路,崎嶇艱難,本文將帶你回顧這個(gè)過(guò)程。
[- 13 -] Web端即時(shí)通訊基礎(chǔ)知識(shí)補(bǔ)課:一文搞懂跨域的所有問(wèn)題!
[鏈接] http://www.52im.net/thread-2732-1-1.html
[摘要] 本文將為你講解跨域問(wèn)題原理,以及理論聯(lián)系實(shí)際,用實(shí)踐代碼也為你演示解決跨域問(wèn)題的幾種方法。
[- 14 -] 網(wǎng)頁(yè)端IM通信技術(shù)快速入門(mén):短輪詢(xún)、長(zhǎng)輪詢(xún)、SSE、WebSocket
[鏈接] http://www.52im.net/thread-3555-1-1.html
[摘要] 對(duì)于即時(shí)通訊網(wǎng)的im和消息推送這類(lèi)即時(shí)通訊技術(shù)開(kāi)發(fā)者來(lái)說(shuō),掌握WebSocket固然很重要,但了解短輪詢(xún)、長(zhǎng)輪詢(xún)等這些所謂的Web端即時(shí)通訊“老技術(shù)”仍然大有裨益,這也正是整理分享本文的重要原因。
[- 15 -] 搞懂現(xiàn)代Web端即時(shí)通訊技術(shù)一文就夠:WebSocket、socket.io、SSE
[鏈接] http://www.52im.net/thread-3695-1-1.html
[摘要] 本文將專(zhuān)門(mén)介紹WebSocket、socket.io、SSE這幾種現(xiàn)代的Web端即時(shí)通訊技術(shù),從適用場(chǎng)景到技術(shù)原理,通俗又不失深度的文字,特別適合對(duì)Web端即時(shí)通訊技術(shù)有一定了解,且想深入學(xué)習(xí)WebSocket等現(xiàn)代Web端“實(shí)時(shí)”通信技術(shù),卻又不想花時(shí)間去深讀枯燥的IETF技術(shù)手冊(cè)的讀者。
??52im社區(qū)本周新文:《網(wǎng)絡(luò)編程懶人入門(mén)(十五):外行也能讀懂的網(wǎng)絡(luò)硬件設(shè)備功能原理速成 http://www.52im.net/thread-4188-1-1.html》,歡迎閱讀!??
posted @ 2023-04-21 13:49 Jack Jiang 閱讀(84) | 評(píng)論 (0) | 編輯 收藏
一、基本介紹
MobileIMSDK - 微信小程序端是一套基于微信原生 WebSocket 的即時(shí)通訊庫(kù):
- 1)超輕量級(jí)、無(wú)任何第 3 方庫(kù)依賴(lài)(開(kāi)箱即用);
- 2)純 JS 編寫(xiě)、ES6 語(yǔ)法、高度提煉,簡(jiǎn)單易用;
- 3)基于微信原生 WebSocket API,簡(jiǎn)潔優(yōu)雅;
- 4)支持運(yùn)行于任何支持微信小程序的手機(jī)端;
- 5)能與 MobileIMSDK 的各種客戶端完美互通;
- 6)可應(yīng)用于微信小程序中的消息推送、客服聊天、企業(yè) OA、IM 等場(chǎng)景。
二、與 MobileIMSDK 的關(guān)系
MobileIMSDK - 微信小程序端是基于微信原生 WebSocket 協(xié)議的 MobileIMSDK 配套客戶端庫(kù)。
MobileIMSDK 是一套專(zhuān)為移動(dòng)端開(kāi)發(fā)的開(kāi)源原創(chuàng) IM 通信層框架:
- 歷經(jīng) 8 年、久經(jīng)考驗(yàn);
- 超輕量級(jí)、高度提煉,lib 包 50KB 以?xún)?nèi);
- 精心封裝,一套 API 同時(shí)支持 UDP、TCP、WebSocket 三種協(xié)議(可能是全網(wǎng)唯一開(kāi)源的);
- 客戶端支持 iOS、Android、標(biāo)準(zhǔn) Java、H5、小程序、Uniapp(開(kāi)發(fā)中..);
- 服務(wù)端基于 Netty,性能卓越、易于擴(kuò)展;??
- 可與姊妹工程 MobileIMSDK-Web 無(wú)縫互通實(shí)現(xiàn)網(wǎng)頁(yè)端聊天或推送等;??
- 可應(yīng)用于跨設(shè)備、跨網(wǎng)絡(luò)的聊天 APP、企業(yè) OA、消息推送等各種場(chǎng)景。
以下是 MobileIMSDK 的最新通信架構(gòu)圖:
PS:MobileIMSDK 的客戶端庫(kù)一直在持續(xù)開(kāi)發(fā)和升級(jí)中,目前 基于 Uniapp 的 MobileIMSDK 客戶端正在開(kāi)發(fā)中 。
三、設(shè)計(jì)目標(biāo)
直接使用原生的微信小程序 WebSocket 有以下問(wèn)題和劣勢(shì):
- 1)功能有限:沒(méi)有心跳保活、斷線重連、消息送達(dá)保證(重傳和去重)等即時(shí)通訊關(guān)鍵算法和邏輯;
- 2)API 簡(jiǎn)陋:在如此有限的原生 API 下,能邏輯清晰地實(shí)現(xiàn)并組合心跳保活、斷線重連、消息送達(dá)保證等算法,需要相當(dāng)高的技術(shù)掌控力;
- 3)邏輯耦合:經(jīng)驗(yàn)欠缺的開(kāi)發(fā)人員,會(huì)將 WebSocket 通信與前端 UI 界面代碼混在一起,使得 UI 界面的重構(gòu)、維護(hù)、改版都非常困難。
針對(duì)以上問(wèn)題,而 MobileIMSDK - 微信小程序端庫(kù)將讓開(kāi)發(fā)者專(zhuān)注于 UI 應(yīng)用層的開(kāi)發(fā),網(wǎng)絡(luò)通信層的專(zhuān)業(yè)代碼交由 SDK 開(kāi)發(fā)人員,從而解偶 UI 前端和通信層的邏輯耦合性,大大降低技術(shù)復(fù)雜性。
MobileIMSDK - 微信小程序端庫(kù)的設(shè)計(jì)目標(biāo)是為您的開(kāi)發(fā)帶來(lái)以下便利:
- 1)界面與通信解偶:UI 界面與網(wǎng)絡(luò)通信代碼解耦,UI 界面的重構(gòu)、維護(hù)、改版都非常容易和優(yōu)雅;
- 2)輕量級(jí)和兼容性:受益于堅(jiān)持原生微信小程序 WebSocket API,簡(jiǎn)潔輕量,無(wú)需任何額外依賴(lài);
- 3)核心內(nèi)聚和收斂:得益于長(zhǎng)期的提煉和經(jīng)驗(yàn)積累,SDK 核心層高度封裝,開(kāi)發(fā)者無(wú)需理解復(fù)雜算法即可簡(jiǎn)單上手。
- 4)純 JS 輕量級(jí)實(shí)現(xiàn):SDK 為純 JS 編寫(xiě)、ES6 語(yǔ)法,無(wú)重量級(jí)框架和庫(kù)依賴(lài),可干凈利落地對(duì)接各種既有系統(tǒng)。
四、技術(shù)亮點(diǎn)
- 輕量易使用:超輕量級(jí) —— 純 JS 編寫(xiě)且無(wú)任何第 3 方庫(kù)依賴(lài),高度提煉 —— 簡(jiǎn)單易用;
- 代碼現(xiàn)代感:盡可能優(yōu)先使用 ES6 語(yǔ)法,摒棄舊式 JS 語(yǔ)法的年代感;
- 兼容性很好:基于微信原生 WebSocket API,可很好地運(yùn)行于支持微信小程序的手機(jī)端;
- 斷網(wǎng)恢復(fù)能力:擁有網(wǎng)絡(luò)狀況自動(dòng)檢測(cè)、斷網(wǎng)自動(dòng)治愈的能力;
- 送達(dá)保證機(jī)制:完善的 QoS 消息送達(dá)保證機(jī)制(多重保障),不漏過(guò)每一條消息;
- 通信協(xié)議封裝:實(shí)現(xiàn)了一個(gè)對(duì)上層透明的即時(shí)通訊通信協(xié)議模型;
- 身份認(rèn)證機(jī)制:實(shí)現(xiàn)了簡(jiǎn)單合理的身份認(rèn)證機(jī)制;
- 完善的 log 信息:在開(kāi)發(fā)調(diào)試階段,確保每一個(gè)算法關(guān)鍵步驟都有日志輸出,讓您的運(yùn)行調(diào)試更為便利;
- 界面代碼解耦:實(shí)現(xiàn)了 UI 界面代碼與 SDK 網(wǎng)絡(luò)通信代碼解偶,防止界面代碼跟 IM 核心代碼混在一起,不利于持續(xù)升級(jí)、重用和維護(hù);
- 聊天協(xié)議兼容:實(shí)現(xiàn)了與 MobileIMSDK 各種客戶端完全兼容的協(xié)議模型。
五、文件組成
SDK代碼文件概覽:
SDK代碼文件用途說(shuō)明:
六、技術(shù)交流
學(xué)習(xí)和資料:點(diǎn)擊進(jìn)入、bug和建議:點(diǎn)擊進(jìn)入
七、Demo運(yùn)行截圖
1)Demo的真機(jī)運(yùn)行效果和功能說(shuō)明圖:
2)Demo在模擬器下的運(yùn)行效果:
3)Demo真機(jī)運(yùn)行實(shí)拍圖:
八、詳盡開(kāi)發(fā)者手冊(cè)
① 開(kāi)發(fā)者手冊(cè)(網(wǎng)頁(yè)版):MobileIMSDK的微信小程序端開(kāi)發(fā)快速入門(mén) ◀
② 開(kāi)發(fā)者手冊(cè)(PDF精編版):
九、引用資料
[1] 微信小程序開(kāi)發(fā)者手冊(cè)
[2] MobileIMSDK開(kāi)源框架的API文檔
[3] MobileIMSDK開(kāi)源IM框架源碼(Github地址點(diǎn)此)
[4] 開(kāi)源輕量級(jí) IM 框架 MobileIMSDK 的微信小程序端已發(fā)布
[5] 開(kāi)源即時(shí)通訊框架MobileIMSDK的微信小程序端開(kāi)發(fā)者手冊(cè)
posted @ 2023-04-20 10:33 Jack Jiang 閱讀(75) | 評(píng)論 (0) | 編輯 收藏
本文由黃工首先發(fā)表于strongerHuang公眾號(hào),原題“網(wǎng)絡(luò)硬件的發(fā)展史”,本文有修訂。
1、引言
本文是《網(wǎng)絡(luò)編程懶人入門(mén)》系列文章的第15篇,本篇將繼續(xù)以通俗易懂的文字,幫你無(wú)腦理解各種基礎(chǔ)網(wǎng)絡(luò)硬件設(shè)備的功能原理。
本文不羅列復(fù)雜、全面的計(jì)算機(jī)網(wǎng)絡(luò)理論,目的是讓閱讀者脫離以往計(jì)算機(jī)理論專(zhuān)著的枯燥內(nèi)容,在寓教于樂(lè)的語(yǔ)言文字中輕松快速的掌握這些知識(shí),適合入門(mén)者,計(jì)網(wǎng)大佬和網(wǎng)絡(luò)編程老油條們請(qǐng)略過(guò)。

學(xué)習(xí)交流:
- 移動(dòng)端IM開(kāi)發(fā)入門(mén)文章:《新手入門(mén)一篇就夠:從零開(kāi)發(fā)移動(dòng)端IM》
- 開(kāi)源IM框架源碼:https://github.com/JackJiang2011/MobileIMSDK(備用地址點(diǎn)此)
(本文已同步發(fā)布于:http://www.52im.net/thread-4188-1-1.html)
2、如何連接個(gè)人計(jì)算機(jī)(PC)?
在發(fā)明網(wǎng)絡(luò)之前,個(gè)人計(jì)算機(jī)之間是獨(dú)立工作的,沒(méi)有網(wǎng)卡、網(wǎng)線或協(xié)議棧,主要使用磁盤(pán)、CD 和其他東西來(lái)傳輸數(shù)據(jù)。

后來(lái),網(wǎng)線出現(xiàn)了。
最小的網(wǎng)絡(luò)單元由網(wǎng)線、網(wǎng)卡和協(xié)議棧組成:
- 1)網(wǎng)線起著物理介質(zhì)的作用,以傳輸比特流 / 電信號(hào);
- 2)網(wǎng)卡將轉(zhuǎn)換數(shù)據(jù)(例如:它將計(jì)算機(jī)存儲(chǔ)的數(shù)據(jù)轉(zhuǎn)換為網(wǎng)線的比特流 / 電信號(hào));
- 3)協(xié)議棧作為一種通信語(yǔ)言,可以在通信過(guò)程中實(shí)現(xiàn)數(shù)據(jù)分析、地址尋址和流控制。

3、網(wǎng)線不夠長(zhǎng)怎么辦?

如果終端之間的距離太遠(yuǎn),一旦超過(guò)網(wǎng)線物理傳輸距離的上限,數(shù)據(jù)就會(huì)開(kāi)始丟失。

中繼器是物理層的設(shè)備,可以中繼和放大信息以實(shí)現(xiàn)設(shè)備的遠(yuǎn)距離傳輸。
4、中繼器端口不足怎么辦?
中繼器通常只有兩個(gè)接口,這意味著如果網(wǎng)絡(luò)中有三個(gè)以上的終端主機(jī),則無(wú)法實(shí)現(xiàn)多個(gè)主機(jī)之間的直接數(shù)據(jù)通信。

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

5、如何有選擇性的發(fā)送數(shù)據(jù)?
有人把網(wǎng)橋比喻成一個(gè) “聰明” 的中繼器。因?yàn)橹欣^器只是對(duì)所接收的信號(hào)進(jìn)行放大,然后直接發(fā)送到另一個(gè)端口連接的電纜上,主要用于擴(kuò)展網(wǎng)絡(luò)的物理連接范圍。
而網(wǎng)橋除了可以擴(kuò)展網(wǎng)絡(luò)的物理連接范圍外,還可以對(duì) MAC 地址進(jìn)行分區(qū),隔離不同物理網(wǎng)段之間的碰撞(也就是隔離 “沖突域”)。

6、速度不夠快怎么辦?
交換機(jī)可以記錄該終端主機(jī)的 MAC 地址,并生成一個(gè) MAC 表。MAC 表相當(dāng)于一個(gè) “map”,交換機(jī)根據(jù) MAC 表在主機(jī)之間轉(zhuǎn)發(fā)數(shù)據(jù)流。

交換機(jī)基于網(wǎng)橋進(jìn)行擴(kuò)展和升級(jí)。
與網(wǎng)橋相比,交換機(jī)具有以下優(yōu)點(diǎn):
- 1)接口數(shù)量更密集(每個(gè)主機(jī)位于一個(gè)獨(dú)立的沖突域中,帶寬利用率大大提高);
- 2)使用專(zhuān)用的 ASIC 硬件芯片進(jìn)行高速轉(zhuǎn)發(fā);
- 3)VLAN 隔離(不僅可以隔離沖突域,還可以通過(guò) VLAN 隔離廣播域)。
交換機(jī)是一種局域網(wǎng)設(shè)備,通常用于局域網(wǎng),不能實(shí)現(xiàn)遠(yuǎn)程廣域網(wǎng)通信。
7、距離還不夠怎么辦?
世界上第一臺(tái)路由器是由斯坦福大學(xué)的 Leonard Bossack 和 Santi Lerner 這對(duì)教師夫婦為斯坦福大學(xué)校園網(wǎng)絡(luò) (SUNet) 和思科公司發(fā)明的。

▲ 思科公司創(chuàng)始人Leonard Bossack 和 Santi Lerner 夫婦
路由器是一種基于 IP 尋址的網(wǎng)絡(luò)層設(shè)備,利用路由表來(lái)實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)發(fā)。路由器主要用于連接不同的局域網(wǎng)以實(shí)現(xiàn)廣播域隔離,也可以用于遠(yuǎn)程通信,如廣域網(wǎng)連接。

諸如 IP 協(xié)議之類(lèi)的邏輯尋址機(jī)制是實(shí)現(xiàn)不同類(lèi)型局域網(wǎng)連接的關(guān)鍵。不同局域網(wǎng)的主機(jī)只要具有邏輯地址(IP 地址)和合理的邏輯地址規(guī)劃(網(wǎng)段規(guī)劃),它們就可以通信。
路由器的誕生是互聯(lián)網(wǎng)爆炸的主要原因,跨媒介、跨地域的網(wǎng)絡(luò)集成已成為現(xiàn)實(shí)。
8、接線太麻煩怎么辦?
無(wú)線 AP可以被視為具有無(wú)線功能的交換機(jī) / 路由器。隨著無(wú)線城市和移動(dòng)辦公的發(fā)展趨勢(shì),無(wú)線產(chǎn)品在網(wǎng)絡(luò)中所占的比例正在增加。

根據(jù)部署方式的不同,可以分為胖 AP 和瘦 AP 解決方案。
1)在胖 AP 方案中,無(wú)線 AP 具有獨(dú)立的操作系統(tǒng),該操作系統(tǒng)可以獨(dú)立調(diào)試無(wú)線熱點(diǎn)的所有配置,類(lèi)似于家用 Tp-link 產(chǎn)品。
2)在瘦 AP 方案中,無(wú)線 AP 僅具有無(wú)線信號(hào)傳輸功能,所有命令調(diào)試都集中在后臺(tái)的 AC / 無(wú)線控制器上。
小型無(wú)線網(wǎng)絡(luò)(家庭、小型企業(yè))可以使用胖 AP 解決,而大型無(wú)線網(wǎng)絡(luò)(無(wú)線城市、無(wú)線園區(qū)網(wǎng)絡(luò))則需要使用瘦 AP(AC + AP)解決。
9、不夠安全怎么辦?
防火墻是一種用于限制網(wǎng)絡(luò)安全訪問(wèn)的網(wǎng)絡(luò)安全產(chǎn)品,通常用于 Internet 的邊緣,以防止外部黑客的攻擊。
根據(jù)防火墻的技術(shù)特點(diǎn),可以分為包過(guò)濾、應(yīng)用代理和狀態(tài)檢測(cè)防火墻。根據(jù)產(chǎn)品形式,可以分為軟件防火墻和硬件防火墻。
防火墻可視為具有安全功能的路由器。早期的防火墻在路由器的基礎(chǔ)上增加了訪問(wèn)控制功能,因此在路由器上可以看到許多防火墻的功能,例如路由協(xié)議、訪問(wèn)控制列表、地址轉(zhuǎn)換技術(shù)等。
防火墻和路由器可以同時(shí)存在于網(wǎng)絡(luò)中。例如,防火墻可以放置在路由器之前或之后。在這種情況下,路由器側(cè)重于地址轉(zhuǎn)換和路由策略,而防火墻側(cè)重于安全隔離等。

在防火墻的基礎(chǔ)上,擴(kuò)展出了 Web 防火墻、安全網(wǎng)關(guān)和入侵檢測(cè) / 入侵防御等安全產(chǎn)品。
10、網(wǎng)絡(luò)擁塞怎么辦?
網(wǎng)絡(luò)中的流量控制設(shè)備主要分為:
- 1)上網(wǎng)行為管理;
- 2)負(fù)載均衡器 / 應(yīng)用交付;
- 3)鏈路優(yōu)化;
- ... ...
上網(wǎng)行為管理產(chǎn)品主要關(guān)注細(xì)粒度的區(qū)分和流量控制。
負(fù)載平衡 / 應(yīng)用程序交付側(cè)重于流量的負(fù)載平衡(根據(jù)流量特征、應(yīng)用程序、地址等進(jìn)行區(qū)分,然后分配到不同的鏈接和服務(wù)器)。
鏈接優(yōu)化主要用于廣域網(wǎng)等低速鏈路的邊界,以使鏈路利用率最大化。

問(wèn)題來(lái)了:組成一個(gè)網(wǎng)絡(luò)需要多少種設(shè)備?
11、家庭 SOHO 網(wǎng)絡(luò)
這是一個(gè)典型的家庭網(wǎng)絡(luò),它通過(guò)無(wú)線路由器提供 WiFi 熱點(diǎn)訪問(wèn),并提供路由器連接到外部網(wǎng)絡(luò)。

12、小型企業(yè)網(wǎng)絡(luò)
小型企業(yè)網(wǎng)絡(luò)使用二層架構(gòu)、單核拓?fù)洌枰酚善鳌⒔粨Q機(jī)和服務(wù)器。

13、園區(qū)網(wǎng)
最常見(jiàn)的園區(qū)網(wǎng)架構(gòu),如大中型企業(yè)網(wǎng)絡(luò) / 校園網(wǎng)絡(luò),采用接入?yún)R聚核三層架構(gòu)和雙核組網(wǎng)。
根據(jù)網(wǎng)絡(luò)需求,分為:
- 1)用戶區(qū);
- 2)內(nèi)部服務(wù)區(qū);
- 3)外部服務(wù)區(qū);
- 4)管理區(qū);
- 5)Internet 區(qū);
- ... ...
它們通過(guò)核心交換機(jī)和防火墻連接并隔離。
互聯(lián)網(wǎng)使用多出口連接,通過(guò)路由器實(shí)現(xiàn)撥號(hào)和 NAT,通過(guò)流量控制設(shè)備實(shí)現(xiàn)負(fù)載均衡 / 上網(wǎng)行為管理,通過(guò)防火墻實(shí)現(xiàn)安全隔離。

14、數(shù)據(jù)中心網(wǎng)絡(luò)

上圖是典型的大型第二層數(shù)據(jù)中心網(wǎng)絡(luò) / IDC 設(shè)計(jì)。
主要分為:
- 1)租戶區(qū)(服務(wù)集群);
- 2)Internet 區(qū);
- 3)安全管理區(qū)域。
租戶區(qū):采用設(shè)備虛擬化和鏈路虛擬化技術(shù),提高設(shè)備處理能力和鏈路承載能力,并將負(fù)載均衡器放置在服務(wù)器區(qū)域中,以合理有效的方式將流量分配給固定服務(wù)器。
Internet 出口區(qū)域:使用路由器執(zhí)行 BGP 和地址反轉(zhuǎn),使用 IPS / anti-DDoS 設(shè)備進(jìn)行大流量泛洪攻擊,使用流量控制執(zhí)行出口負(fù)載,并使用防火墻進(jìn)行安全隔離。
安全管理區(qū):通過(guò)防火墻安全訪問(wèn),通過(guò)審計(jì)、日志、入侵檢測(cè)、網(wǎng)絡(luò)管理等產(chǎn)品對(duì)整個(gè)網(wǎng)絡(luò)進(jìn)行管理。
15、系列文章
本文是系列文章中的第15篇,本系列文章的大綱如下:
[1] 網(wǎng)絡(luò)編程懶人入門(mén)(一):快速理解網(wǎng)絡(luò)通信協(xié)議(上篇)
[2] 網(wǎng)絡(luò)編程懶人入門(mén)(二):快速理解網(wǎng)絡(luò)通信協(xié)議(下篇)
[3] 網(wǎng)絡(luò)編程懶人入門(mén)(三):快速理解TCP協(xié)議一篇就夠
[4] 網(wǎng)絡(luò)編程懶人入門(mén)(四):快速理解TCP和UDP的差異
[5] 網(wǎng)絡(luò)編程懶人入門(mén)(五):快速理解為什么說(shuō)UDP有時(shí)比TCP更有優(yōu)勢(shì)
[6] 網(wǎng)絡(luò)編程懶人入門(mén)(六):史上最通俗的集線器、交換機(jī)、路由器功能原理入門(mén)
[7] 網(wǎng)絡(luò)編程懶人入門(mén)(七):深入淺出,全面理解HTTP協(xié)議
[8] 網(wǎng)絡(luò)編程懶人入門(mén)(八):手把手教你寫(xiě)基于TCP的Socket長(zhǎng)連接
[9] 網(wǎng)絡(luò)編程懶人入門(mén)(九):通俗講解,有了IP地址,為何還要用MAC地址?
[10] 網(wǎng)絡(luò)編程懶人入門(mén)(十):一泡尿的時(shí)間,快速讀懂QUIC協(xié)議
[11] 網(wǎng)絡(luò)編程懶人入門(mén)(十一):一文讀懂什么是IPv6
[12] 網(wǎng)絡(luò)編程懶人入門(mén)(十二):快速讀懂Http/3協(xié)議,一篇就夠!
[13] 網(wǎng)絡(luò)編程懶人入門(mén)(十三):一泡尿的時(shí)間,快速搞懂TCP和UDP的區(qū)別
[14] 網(wǎng)絡(luò)編程懶人入門(mén)(十四):到底什么是Socket?一文即懂!
[15] 網(wǎng)絡(luò)編程懶人入門(mén)(十五):外行也能讀懂的網(wǎng)絡(luò)硬件設(shè)備功能原理速成(* 本文)
16、參考資料
[1] 快速理解網(wǎng)絡(luò)通信協(xié)議(上篇)
[2] 快速理解網(wǎng)絡(luò)通信協(xié)議(下篇)
[3] 假如你來(lái)設(shè)計(jì)網(wǎng)絡(luò),會(huì)怎么做?
[4] 史上最通俗的集線器、交換機(jī)、路由器功能原理入門(mén)
[5] 面視必備,史上最通俗計(jì)算機(jī)網(wǎng)絡(luò)分層詳解
[6] 技術(shù)往事:改變世界的TCP/IP協(xié)議(珍貴多圖、手機(jī)慎點(diǎn))
[7] P2P技術(shù)詳解(一):NAT詳解——詳細(xì)原理、P2P簡(jiǎn)介
(本文已同步發(fā)布于:http://www.52im.net/thread-4188-1-1.html)
posted @ 2023-04-18 11:07 Jack Jiang 閱讀(90) | 評(píng)論 (0) | 編輯 收藏
posted @ 2023-04-13 17:11 Jack Jiang 閱讀(140) | 評(píng)論 (0) | 編輯 收藏
為了更好地分類(lèi)閱讀52im.net 總計(jì)1000多篇精編文章,我將在每周三推送新的一期技術(shù)文集,本次是第12 期。
[- 1 -] 應(yīng)用保活終極總結(jié)(一):Android6.0以下的雙進(jìn)程守護(hù)保活實(shí)踐
[鏈接] http://www.52im.net/thread-1135-1-1.html
[摘要] 因?yàn)锳ndroid機(jī)型太多太雜,以及各廠商定制ROOM的差異,Android應(yīng)用保活沒(méi)有一勞永逸和萬(wàn)能的方法,本文探討的是Android應(yīng)用在Android 6.0以下系統(tǒng)中的典型應(yīng)用場(chǎng)景下的保活實(shí)踐(Android 6.0及以上系統(tǒng)的防殺和復(fù)活方法,詳見(jiàn)本系列文章的下兩篇《應(yīng)用保活終極總結(jié)(二):Android6.0及以上的保活實(shí)踐(進(jìn)程防殺篇)》、《Android應(yīng)用保活終極總結(jié)(三):Android6.0及以上的保活實(shí)踐(被殺復(fù)活篇)》),內(nèi)容僅供參考,希望給您帶來(lái)啟發(fā)。
[- 2 -] 應(yīng)用保活終極總結(jié)(二):Android6.0及以上的保活實(shí)踐(進(jìn)程防殺篇)
[鏈接] http://www.52im.net/thread-1138-1-1.html
[摘要] 本文便是對(duì)最近一周的Android進(jìn)程防殺、進(jìn)程被殺復(fù)活的探索、學(xué)習(xí)、測(cè)試的內(nèi)容總結(jié),以備將來(lái)不時(shí)之需。因保活防殺和被殺復(fù)活涉及內(nèi)容較多,我將它分成了兩篇:即進(jìn)程防殺篇(本文)和進(jìn)程被殺復(fù)活篇(下篇),本篇將討論如何實(shí)現(xiàn)進(jìn)程防殺。
[- 3 -] 應(yīng)用保活終極總結(jié)(三):Android6.0及以上的保活實(shí)踐(被殺復(fù)活篇)
[鏈接] http://www.52im.net/thread-1140-1-1.html
[摘要] 本文將重點(diǎn)討論進(jìn)程被殺后復(fù)活的可能性及實(shí)踐。
[- 4 -] Android進(jìn)程保活詳解:一篇文章解決你的所有疑問(wèn)
[鏈接] http://www.52im.net/thread-438-1-1.html
[摘要] 什么樣的應(yīng)用需要進(jìn)程保活?通常情況下,即時(shí)通訊類(lèi)的應(yīng)用(包括IM聊天應(yīng)用、消息推送服務(wù)等)為了保證消息的全時(shí)、實(shí)時(shí)送達(dá)能力,必須要實(shí)現(xiàn)進(jìn)程或Service的保活。而就這一看似不起眼的問(wèn)題,實(shí)際處理起來(lái),因?yàn)楸姸郃ndroid手機(jī)和Android系統(tǒng)版本的差異,讓問(wèn)題的處理充滿了不確定性。
[- 5 -] Android端消息推送總結(jié):實(shí)現(xiàn)原理、心跳保活、遇到的問(wèn)題等
[鏈接]http://www.52im.net/thread-341-1-1.html
[摘要] 最近研究Android推送的實(shí)現(xiàn), 研究了兩天一夜, 有了一點(diǎn)收獲, 寫(xiě)下來(lái)既為了分享, 也為了吐槽. 需要說(shuō)明的是有些東西偏底層硬件和通信行業(yè), 我對(duì)這些一竅不通, 只能說(shuō)說(shuō)自己的理解.
[- 6-] 為何基于TCP協(xié)議的移動(dòng)端IM仍然需要心跳保活機(jī)制?
[鏈接] http://www.52im.net/thread-281-1-1.html
[摘要] 很多人認(rèn)為,TCP協(xié)議自身先天就有KeepAlive機(jī)制,為何基于它的通訊鏈接,仍然需要在應(yīng)用層實(shí)現(xiàn)額外的心跳保活?本文將從移動(dòng)端IM實(shí)踐的角度告訴你,即使使用的是TCP協(xié)議,應(yīng)用層的心跳保活仍舊必不可少。
[- 7 -] 一文讀懂即時(shí)通訊應(yīng)用中的網(wǎng)絡(luò)心跳包機(jī)制:作用、原理、實(shí)現(xiàn)思路等
[鏈接] http://www.52im.net/thread-2697-1-1.html
[摘要] 要想真正理解即時(shí)通訊應(yīng)用底層的開(kāi)發(fā),心跳機(jī)制必須掌握,而這也是本文寫(xiě)作的目的,希望能帶給你啟發(fā)。
[- 8-] 微信團(tuán)隊(duì)原創(chuàng)分享:Android版微信后臺(tái)保活實(shí)戰(zhàn)分享(進(jìn)程保活篇)
[鏈接] http://www.52im.net/thread-210-1-1.html
[摘要] 盡量保證應(yīng)用的進(jìn)程不被Android系統(tǒng)回收。這是本文要討論的內(nèi)容。
[- 9 -] 微信團(tuán)隊(duì)原創(chuàng)分享:Android版微信后臺(tái)保活實(shí)戰(zhàn)分享(網(wǎng)絡(luò)保活篇)
[鏈接] http://www.52im.net/thread-209-1-1.html
[摘要] 如何保證消息接收實(shí)時(shí)性。這是本文要討論的內(nèi)容。
[- 10-] 移動(dòng)端IM實(shí)踐:實(shí)現(xiàn)Android版微信的智能心跳機(jī)制
[鏈接] http://www.52im.net/thread-120-1-1.html
[摘要] 設(shè)計(jì)此方案的主要目標(biāo)是,在盡量不影響用戶收消息及時(shí)性的前提下,根據(jù)網(wǎng)絡(luò)類(lèi)型自適應(yīng)的找出保活信令TCP連接的盡可能大的心跳間隔,從而達(dá)到減少安卓微信因心跳引起的空中信道資源消耗,減少心跳Server的負(fù)載,以及減少部分因心跳引起的耗電。
[- 11-] 移動(dòng)端IM實(shí)踐:WhatsApp、Line、微信的心跳策略分析
[鏈接] http://www.52im.net/thread-121-1-1.html
[摘要] 本文著重分析WhatsApp、Line、微信的心跳。
[- 12-] Android P正式版即將到來(lái):后臺(tái)應(yīng)用保活、消息推送的真正噩夢(mèng)
[鏈接] http://www.52im.net/thread-1832-1-1.html
[摘要] Android P官方公開(kāi)的開(kāi)發(fā)者資料來(lái)看,此版加入或強(qiáng)化的多項(xiàng)設(shè)備電量管理新特性,使得需要后臺(tái)消息推送、應(yīng)用保活的APP變的越來(lái)越困難,黑科技恐將成為歷史。
[- 13-] 全面盤(pán)點(diǎn)當(dāng)前Android后臺(tái)保活方案的真實(shí)運(yùn)行效果(截止2019年前)
[鏈接] http://www.52im.net/thread-2176-1-1.html
[摘要] 正因?yàn)锳ndroid系統(tǒng)版本的差異,也導(dǎo)致了各種保活黑科技的運(yùn)行效果大相徑庭,所以本文正好借此機(jī)會(huì),盤(pán)點(diǎn)一下當(dāng)前主流(截止2019年前)的保活黑科技在市面上各版本Android手機(jī)上的運(yùn)行效果,希望能給大家提供一些客觀的參考
[- 14-] 融云技術(shù)分享:融云安卓端IM產(chǎn)品的網(wǎng)絡(luò)鏈路保活技術(shù)實(shí)踐
[鏈接] http://www.52im.net/thread-2744-1-1.html
[摘要] 眾所周知,IM 即時(shí)通訊是一項(xiàng)對(duì)即時(shí)性要求非常高的技術(shù),而保障消息即時(shí)到達(dá)的首要條件就是鏈路存活。那么在復(fù)雜的網(wǎng)絡(luò)環(huán)境和國(guó)內(nèi)安卓手機(jī)被深度定制化的條件下,如何保障鏈路存活呢?本文詳解了融云安卓端IM產(chǎn)品在基于 TCP 協(xié)議實(shí)現(xiàn)鏈路保活方面的實(shí)踐總結(jié)。
[- 15-] 一種Android端IM智能心跳算法的設(shè)計(jì)與實(shí)現(xiàn)探討(含樣例代碼)
[鏈接] http://www.52im.net/thread-783-1-1.html
[摘要] 本文將與大家一起探討一種更加簡(jiǎn)單易行和實(shí)用的心跳算法,不一定適合所有人,但希望能需要的同行帶來(lái)一些啟發(fā)。
[- 16-] 跟著源碼學(xué)IM(一):手把手教你用Netty實(shí)現(xiàn)心跳機(jī)制、斷線重連機(jī)制
[鏈接] http://www.52im.net/thread-2663-1-1.html
[摘要] 說(shuō)到用Netty來(lái)開(kāi)發(fā)IM或推送系統(tǒng),以一個(gè)生產(chǎn)級(jí)產(chǎn)品的標(biāo)準(zhǔn)來(lái)說(shuō),最基本的心跳機(jī)制、斷線重連機(jī)制肯定得有吧?好,如果你還不清楚這些,那就看看本文吧!
[- 17-] 跟著源碼學(xué)IM(五):正確理解IM長(zhǎng)連接、心跳及重連機(jī)制,并動(dòng)手實(shí)現(xiàn)
[鏈接] http://www.52im.net/thread-2799-1-1.html
[摘要] 本文正好借著在CIM系統(tǒng)中有這樣兩個(gè)需求(CIM是本文作者從零開(kāi)發(fā)的一個(gè)學(xué)習(xí)性質(zhì)的IM系統(tǒng),詳見(jiàn)《拿起鍵盤(pán)就是干:跟我一起徒手開(kāi)發(fā)一套分布式IM系統(tǒng)》),正好來(lái)聊一聊我是如何理解IM長(zhǎng)連接的心跳及重連機(jī)制,以及又是怎么踩坑已及填坑的。
[- 18-] 2020年了,Android后臺(tái)保活還有戲嗎?看我如何優(yōu)雅的實(shí)現(xiàn)
[鏈接] http://www.52im.net/thread-2881-1-1.html
[摘要] 總之,Android應(yīng)用的后臺(tái)保活在某些場(chǎng)景下,還是有持續(xù)的需求。除了之前那些耳熟能詳?shù)谋;詈诳萍家酝猓贏ndroid 9.0(甚至Android 10)時(shí)代,我們還有哪些保活方法可以用?那么,請(qǐng)跟著本文作者的思路,看看更優(yōu)雅的后臺(tái)保活實(shí)現(xiàn)方法吧。
[- 19-] 史上最強(qiáng)Android保活思路:深入剖析騰訊TIM的進(jìn)程永生技術(shù)
[鏈接] http://www.52im.net/thread-2893-1-1.html
[摘要] 本文將從Andriod系統(tǒng)層面為你深入剖析騰訊TIM這款I(lǐng)M應(yīng)用的超強(qiáng)保活能力,希望能給你帶來(lái)更多Android方面的靈感。
[- 20-] Android進(jìn)程永生技術(shù)終極揭密:進(jìn)程被殺底層原理、APP應(yīng)對(duì)被殺技巧
[鏈接] http://www.52im.net/thread-2921-1-1.html
[摘要] 本文的技術(shù)原理講解透徹、系統(tǒng)源碼分享到位、樣例代碼也很有參考意義,希望能對(duì)有同樣興趣愛(ài)好的Android開(kāi)發(fā)者、IM開(kāi)發(fā)者、推送系統(tǒng)開(kāi)發(fā)者等,帶來(lái)對(duì)于Android進(jìn)程保活技術(shù)的深入理解。
[- 21-] Android保活從入門(mén)到放棄:乖乖引導(dǎo)用戶加白名單吧(附7大機(jī)型加白示例
[鏈接] http://www.52im.net/thread-3033-1-1.html
[摘要] 本文將以某款線上的IM產(chǎn)品為例,介紹它是如何引導(dǎo)用戶在多款主流機(jī)型上加白名單的,并分享了該款I(lǐng)M中已制作完成的多達(dá)7款主流Andriod機(jī)型的詳細(xì)加白FAQ頁(yè)面資源(含完整HTML+圖片),方便您進(jìn)行參考、學(xué)習(xí)和研究,希望能為你的應(yīng)用開(kāi)發(fā)帶來(lái)幫助。
[- 22-] 阿里IM技術(shù)分享(五):閑魚(yú)億級(jí)IM消息系統(tǒng)的及時(shí)性?xún)?yōu)化實(shí)踐
[鏈接] http://www.52im.net/thread-3726-1-1.html
[摘要] 本文將根據(jù)閑魚(yú)IM消息系統(tǒng)在消息及時(shí)性方面的優(yōu)化實(shí)踐,詳細(xì)分析了IM在線通道面臨的各種技術(shù)問(wèn)題,并通過(guò)相應(yīng)的技術(shù)手段來(lái)優(yōu)化從而保證用戶消息的及時(shí)到達(dá)。
[- 23-] 萬(wàn)字長(zhǎng)文:手把手教你實(shí)現(xiàn)一套高效的IM長(zhǎng)連接自適應(yīng)心跳保活機(jī)制
[鏈接] http://www.52im.net/thread-3908-1-1.html
[摘要] 我將通過(guò)本篇文章,手把手教大家實(shí)現(xiàn)一套可自適應(yīng)的心跳保活機(jī)制,從而能高效穩(wěn)定地維持諸如IM聊天這類(lèi)需求的長(zhǎng)連接。
??52im社區(qū)本周新文:《即時(shí)通訊框架MobileIMSDK的微信小程序端開(kāi)發(fā)者手冊(cè)》,歡迎閱讀!??
我是Jack Jiang,我為自已帶鹽!https://github.com/JackJiang2011/MobileIMSDK/
posted @ 2023-04-11 14:49 Jack Jiang 閱讀(88) | 評(píng)論 (0) | 編輯 收藏
posted @ 2023-04-07 12:21 Jack Jiang 閱讀(111) | 評(píng)論 (0) | 編輯 收藏