戲說移動江湖--網(wǎng)絡(luò)通信架構(gòu)

大主線

細(xì)說移動開發(fā)中網(wǎng)絡(luò)通信架構(gòu)

前言

本文閱讀需要6分鐘袭灯。

你可能的收獲:

??理解網(wǎng)絡(luò)層架構(gòu)和設(shè)計(jì)的基線和主線

? 學(xué)會網(wǎng)絡(luò)通信各方案各技術(shù)的細(xì)枝末葉

? 希望能給讀者開發(fā)項(xiàng)目有點(diǎn)啟發(fā)和思索


正文

有江湖的地方就有愛恨情仇,有代碼的地方就有風(fēng)花雪月

我們一般談網(wǎng)絡(luò)層杖小,也就是說的業(yè)務(wù)數(shù)據(jù)通信層,其主要鏈接客戶端和服務(wù)端業(yè)務(wù)間的數(shù)據(jù)交互,因此其一般處于項(xiàng)目的核心地位贞盯,在架構(gòu)層面來說雖然是處于底層架構(gòu)那塊,但其在項(xiàng)目開始階段就深冰般存在沪饺,雖為上層提供服務(wù)看其像一個簡簡單單的接口方法躏敢,但是其地位還是起到承上啟下的功效,從而保證各業(yè)務(wù)數(shù)據(jù)的安全和穩(wěn)定整葡。


分割線

雖說項(xiàng)目開始階段網(wǎng)絡(luò)層就存在件余,但是一般公司初期在人員不足和業(yè)務(wù)快速迭代情況基本都是簡單引入第三方的網(wǎng)絡(luò)庫作為網(wǎng)絡(luò)層快速提供服務(wù),例如市面上的httpURLconnection,httpclient啼器,okhttp旬渠,volley等第三方網(wǎng)絡(luò)庫簡單提供一層薄薄的封裝,完美支持當(dāng)前業(yè)務(wù)和需求端壳,皆大歡喜告丢。隨著業(yè)務(wù)量的爆發(fā)和,stop,停轻局,請先講講市面上各個網(wǎng)絡(luò)庫的對比以及你的評價(jià)才沧?說真的去google檢索出一大堆,但從我的角度來對比評價(jià)看觅捆,可簡單從三個維度來說:

第一個維度從基本性能和穩(wěn)定這塊來看市面上第三方庫都處于同一個水平點(diǎn);

第二個維度從好不好使的話麻敌,簡單封裝后都好使栅炒,所以這塊也沒有很大的高低之區(qū)分;

第三個維度若從新特性這塊來看术羔,因業(yè)務(wù)而異赢赊。

所以說項(xiàng)目初期你隨便選個第三方庫加上簡單封裝提供網(wǎng)絡(luò)服務(wù)都是滿足公司現(xiàn)狀的。

分割線

但是隨著公司業(yè)務(wù)的上升和市場快速推進(jìn)级历,業(yè)務(wù)量的爆發(fā)和用戶量的增加释移,網(wǎng)絡(luò)層此刻肯定慢慢滿足不了當(dāng)前業(yè)務(wù),例如高性能寥殖,高穩(wěn)定玩讳,安全以及滿足個性化需求支持。這個時候就有點(diǎn)吃力不討好的狀態(tài)嚼贡,所以就需要對網(wǎng)絡(luò)層進(jìn)行一次架構(gòu)熏纯,從而來滿足高性能穩(wěn)定以及高擴(kuò)展性看齊。這個時候就需要全員一起梳理各個考慮點(diǎn)和需求點(diǎn)進(jìn)行一次性架構(gòu)粤策;此時的網(wǎng)絡(luò)架構(gòu)基本能滿足中小企業(yè)各個階段的發(fā)展需求樟澜;(說白點(diǎn)網(wǎng)絡(luò)層設(shè)計(jì)架構(gòu)生命周期就是兩三次大換血,其他時候不可能沒事就去動一動叮盘,這是底層庫弄不好都變成aar秩贰,修改說不定都需要申請公司權(quán)限了)。

因此大體歸納總結(jié)架構(gòu)設(shè)計(jì)上至少滿足:

1/提供簡單易用的多線程并發(fā)訪問(線程熊户,隊(duì)列等)

2/提供對業(yè)務(wù)層的訪問代碼保持不變(否則全組人員干死你的心都有)

3/提供自定義網(wǎng)絡(luò)庫或第三方網(wǎng)絡(luò)庫的切換和更新

4/提供網(wǎng)絡(luò)層的日志統(tǒng)計(jì)萍膛,實(shí)現(xiàn)無縫對接服務(wù)端的日志系統(tǒng)

5/支持https以及簽名證明等

6/提供業(yè)務(wù)層的自定義特色需求

7/提供高性能訪問機(jī)制(DNS解析,長短鏈接以及重傳機(jī)制等實(shí)現(xiàn))

8/支持響應(yīng)數(shù)據(jù)的緩存嚷堡,根據(jù)緩存類型實(shí)現(xiàn)各種復(fù)雜的數(shù)據(jù)緩存

9/支持?jǐn)r截器和過濾器功能

10/提供擴(kuò)展性對外接口用于滿足后續(xù)特殊業(yè)務(wù)需求

分割線

有人看到這些點(diǎn)外懵圈蝗罗,怎么沒看到和http協(xié)議本身的功能如實(shí)現(xiàn)http1和http2艇棕,GZIP以及keepAlive等特性的實(shí)現(xiàn)?不好意思串塑,這些都是底層網(wǎng)絡(luò)服務(wù)庫的功能沼琉,你只需要通過條件3的方案去替換或者更新這塊的底層http協(xié)議庫即可。

回到剛上面歸納出的多個條件上來桩匪,其實(shí)這些條件都是從大局觀上去思考總結(jié)打瘪,從業(yè)務(wù)需求層面上著手以及公司現(xiàn)狀及未來發(fā)展上分析得來的。

其實(shí)細(xì)細(xì)分析傻昙,網(wǎng)絡(luò)層如果從產(chǎn)品類型來區(qū)分闺骚,無外乎兩個大類著手,社交通訊類(IM)和其他類妆档;因?yàn)镮M類的網(wǎng)絡(luò)僻爽,其業(yè)務(wù)性質(zhì)比較特殊,著重在信令認(rèn)證贾惦,超時和重試機(jī)制以及數(shù)據(jù)可靠性安全性等要求極高胸梆,其設(shè)計(jì)架構(gòu)上和側(cè)重點(diǎn)肯定不一樣,這塊可以去看騰訊開源的mars庫须板;其他大部分公司業(yè)務(wù)就是網(wǎng)絡(luò)數(shù)據(jù)通信碰镜,大體就是滿足各種奇葩業(yè)務(wù)需求和提供可控的性能和可靠的安全等等,所以對于此類網(wǎng)絡(luò)因人而異進(jìn)行設(shè)計(jì)和架構(gòu)习瑰。中小企業(yè)開始改造網(wǎng)絡(luò)層架構(gòu)時绪颖,首先作為程序員通病,先看下是否有現(xiàn)成框架甜奄,根據(jù)以上條件丟進(jìn)去google百度后啥都沒有菠发,哈,那肯定搜索不到贺嫂,不過等我講完本篇就有現(xiàn)成的庫了哦,如果猴急就直接拉到最后可以看到myhttp的GitHub開源地址(覺得名字俗氣可以評論反饋雁乡,不過我是不會修改的第喳,俗才親民,名字俗但是內(nèi)容不俗即可踱稍,雅俗共賞)曲饱。


分割線

到了這里基本準(zhǔn)備結(jié)尾,接下來就上面幾個條件進(jìn)行簡單說明珠月,其詳細(xì)架構(gòu)和使用說明請查看github的readme扩淀,作為程序員我還是推薦readthe fucking source code。

其一關(guān)于多線程并發(fā)訪問支持啤挎,本庫通過自己實(shí)現(xiàn)了一套滿足業(yè)務(wù)線和經(jīng)驗(yàn)值爆表的線程并發(fā)體系框架驻谆,經(jīng)得起現(xiàn)網(wǎng)業(yè)務(wù)的考驗(yàn)和ISO標(biāo)準(zhǔn)卵凑,^_^。然后在此基礎(chǔ)上自己添加了各種特色線程功能以及輔助服務(wù)如日志打樁以及統(tǒng)計(jì)等功能胜臊。作為一個完備的app勺卢,其線程池配套設(shè)施必須統(tǒng)一管理,所以本框架提供了線程池并發(fā)統(tǒng)一訪問功能象对,通過自己實(shí)現(xiàn)一套簡化的響應(yīng)式編程方式訪問線程黑忱,提供多種線程調(diào)度器如main線程調(diào)度器,IO線程調(diào)度器勒魔,http線程調(diào)度器以及立即線程調(diào)度器和后臺線程調(diào)度器甫煞。基本滿足極大部分用戶冠绢;

其二網(wǎng)絡(luò)庫的切換本庫可以實(shí)現(xiàn)無縫對接抚吠,不管是自己實(shí)現(xiàn)一套(如公司中后期就安全等問題通過c++實(shí)現(xiàn)一套網(wǎng)絡(luò)層訪問)還是市面上第三方網(wǎng)絡(luò)庫統(tǒng)統(tǒng)滿足,切換起來非常簡單對接也快捷唐全。

其三提供一套極高擴(kuò)展性的DNS解析器配合安卓網(wǎng)絡(luò)特性埃跷,完美實(shí)現(xiàn)高性能訪問等功能;可以擴(kuò)展市面上所有的DNS庫邮利,例如騰訊的httpDNS+弥雹,阿里的DNS庫等等。

其四關(guān)于網(wǎng)絡(luò)超時重試機(jī)制目前只弄了初步的功能延届,后續(xù)根據(jù)微信終端跨平臺組件 mars 系列的設(shè)計(jì)和方案進(jìn)行編碼和優(yōu)化剪勿;具體可先參考騰訊微信關(guān)于這塊的實(shí)驗(yàn)和設(shè)計(jì)。


分割線

當(dāng)當(dāng)當(dāng)方庭,下班了厕吉,若自己需要擴(kuò)展其他功能,請download源碼后自己改造械念,其源碼分層明確易懂头朱,代碼注釋詳細(xì),代碼關(guān)系層統(tǒng)一龄减。就這個問題不得不鄙視下那些牛逼框架的源碼项钮,基本不給人看的那種,要看也得去一頭的頭皮屑希停。hi man烁巫,fuck。

MyHttp(GitHub地址:https://github.com/wenzhonghu/myhttp)宠能,pls star it

有問題或者建議郵亚隙,wenzhonghu@qq.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市违崇,隨后出現(xiàn)的幾起案子阿弃,更是在濱河造成了極大的恐慌诊霹,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恤浪,死亡現(xiàn)場離奇詭異畅哑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)水由,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門荠呐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人砂客,你說我怎么就攤上這事泥张。” “怎么了鞠值?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵媚创,是天一觀的道長。 經(jīng)常有香客問我彤恶,道長钞钙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任声离,我火速辦了婚禮芒炼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘术徊。我一直安慰自己本刽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布赠涮。 她就那樣靜靜地躺著子寓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪笋除。 梳的紋絲不亂的頭發(fā)上斜友,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機(jī)與錄音垃它,去河邊找鬼蝙寨。 笑死,一個胖子當(dāng)著我的面吹牛嗤瞎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播听系,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼贝奇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了靠胜?” 一聲冷哼從身側(cè)響起掉瞳,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤毕源,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后陕习,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霎褐,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年该镣,在試婚紗的時候發(fā)現(xiàn)自己被綠了冻璃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡损合,死狀恐怖省艳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嫁审,我是刑警寧澤跋炕,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站律适,受9級特大地震影響辐烂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜捂贿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一纠修、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧眷蜓,春花似錦分瘾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至汽纤,卻和暖如春上岗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蕴坪。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工肴掷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人背传。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓呆瞻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親径玖。 傳聞我的和親對象是個殘疾皇子痴脾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,097評論 1 32
  • 新綠輕柔,雕梁畫棟人眉嫵梳星。畫橋久佇赞赖,卻忘天昏暮滚朵。 最苦別離,有恨朝誰訴前域?葉不語辕近。相思幾縷,和葉隨風(fēng)去匿垄。 (詞林正韻...
    云淡風(fēng)輕110閱讀 439評論 48 65
  • 從早堅(jiān)持到晚移宅,從夜堅(jiān)持到黎明。 堅(jiān)持以后年堆,還有堅(jiān)持吞杭。 如果生活認(rèn)為我還不夠堅(jiān)強(qiáng),一定要把我淬煉成強(qiáng)者之一变丧,我不會再...
    面包嬸閱讀 351評論 0 1
  • 在我大約四五歲的時候芽狗,我們村里只有幾臺電視機(jī),而我家是沒有電視的痒蓬。那時候村民們都對電視這個感到無比新奇童擎,家里置辦了...
    韓天真的小小世界閱讀 360評論 0 2