戏说移动江湖--网络通信架构

大主线

细说移动开发中网络通信架构

前言

本文阅读需要6分钟。

你可能的收获:

  理解网络层架构和设计的基线和主线

  学会网络通信各方案各技术的细枝末叶

  希望能给读者开发项目有点启发和思索


正文

有江湖的地方就有爱恨情仇,有代码的地方就有风花雪月

我们一般谈网络层,也就是说的业务数据通信层,其主要链接客户端和服务端业务间的数据交互,因此其一般处于项目的核心地位,在架构层面来说虽然是处于底层架构那块,但其在项目开始阶段就深冰般存在,虽为上层提供服务看其像一个简简单单的接口方法,但是其地位还是起到承上启下的功效,从而保证各业务数据的安全和稳定。


分割线

虽说项目开始阶段网络层就存在,但是一般公司初期在人员不足和业务快速迭代情况基本都是简单引入第三方的网络库作为网络层快速提供服务,例如市面上的httpURLconnection,httpclient,okhttp,volley等第三方网络库简单提供一层薄薄的封装,完美支持当前业务和需求,皆大欢喜。随着业务量的爆发和,stop,停,请先讲讲市面上各个网络库的对比以及你的评价?说真的去google检索出一大堆,但从我的角度来对比评价看,可简单从三个维度来说:

第一个维度从基本性能和稳定这块来看市面上第三方库都处于同一个水平点;

第二个维度从好不好使的话,简单封装后都好使,所以这块也没有很大的高低之区分;

第三个维度若从新特性这块来看,因业务而异。

所以说项目初期你随便选个第三方库加上简单封装提供网络服务都是满足公司现状的。

分割线

但是随着公司业务的上升和市场快速推进,业务量的爆发和用户量的增加,网络层此刻肯定慢慢满足不了当前业务,例如高性能,高稳定,安全以及满足个性化需求支持。这个时候就有点吃力不讨好的状态,所以就需要对网络层进行一次架构,从而来满足高性能稳定以及高扩展性看齐。这个时候就需要全员一起梳理各个考虑点和需求点进行一次性架构;此时的网络架构基本能满足中小企业各个阶段的发展需求;(说白点网络层设计架构生命周期就是两三次大换血,其他时候不可能没事就去动一动,这是底层库弄不好都变成aar,修改说不定都需要申请公司权限了)。

因此大体归纳总结架构设计上至少满足:

1/提供简单易用的多线程并发访问(线程,队列等)

2/提供对业务层的访问代码保持不变(否则全组人员干死你的心都有)

3/提供自定义网络库或第三方网络库的切换和更新

4/提供网络层的日志统计,实现无缝对接服务端的日志系统

5/支持https以及签名证明等

6/提供业务层的自定义特色需求

7/提供高性能访问机制(DNS解析,长短链接以及重传机制等实现)

8/支持响应数据的缓存,根据缓存类型实现各种复杂的数据缓存

9/支持拦截器和过滤器功能

10/提供扩展性对外接口用于满足后续特殊业务需求

分割线

有人看到这些点外懵圈,怎么没看到和http协议本身的功能如实现http1和http2,GZIP以及keepAlive等特性的实现?不好意思,这些都是底层网络服务库的功能,你只需要通过条件3的方案去替换或者更新这块的底层http协议库即可。

回到刚上面归纳出的多个条件上来,其实这些条件都是从大局观上去思考总结,从业务需求层面上着手以及公司现状及未来发展上分析得来的。

其实细细分析,网络层如果从产品类型来区分,无外乎两个大类着手,社交通讯类(IM)和其他类;因为IM类的网络,其业务性质比较特殊,着重在信令认证,超时和重试机制以及数据可靠性安全性等要求极高,其设计架构上和侧重点肯定不一样,这块可以去看腾讯开源的mars库;其他大部分公司业务就是网络数据通信,大体就是满足各种奇葩业务需求和提供可控的性能和可靠的安全等等,所以对于此类网络因人而异进行设计和架构。中小企业开始改造网络层架构时,首先作为程序员通病,先看下是否有现成框架,根据以上条件丢进去google百度后啥都没有,哈,那肯定搜索不到,不过等我讲完本篇就有现成的库了哦,如果猴急就直接拉到最后可以看到myhttp的GitHub开源地址(觉得名字俗气可以评论反馈,不过我是不会修改的,俗才亲民,名字俗但是内容不俗即可,雅俗共赏)。


分割线

到了这里基本准备结尾,接下来就上面几个条件进行简单说明,其详细架构和使用说明请查看github的readme,作为程序员我还是推荐readthe fucking source code。

其一关于多线程并发访问支持,本库通过自己实现了一套满足业务线和经验值爆表的线程并发体系框架,经得起现网业务的考验和ISO标准,^_^。然后在此基础上自己添加了各种特色线程功能以及辅助服务如日志打桩以及统计等功能。作为一个完备的app,其线程池配套设施必须统一管理,所以本框架提供了线程池并发统一访问功能,通过自己实现一套简化的响应式编程方式访问线程,提供多种线程调度器如main线程调度器,IO线程调度器,http线程调度器以及立即线程调度器和后台线程调度器。基本满足极大部分用户;

其二网络库的切换本库可以实现无缝对接,不管是自己实现一套(如公司中后期就安全等问题通过c++实现一套网络层访问)还是市面上第三方网络库统统满足,切换起来非常简单对接也快捷。

其三提供一套极高扩展性的DNS解析器配合安卓网络特性,完美实现高性能访问等功能;可以扩展市面上所有的DNS库,例如腾讯的httpDNS+,阿里的DNS库等等。

其四关于网络超时重试机制目前只弄了初步的功能,后续根据微信终端跨平台组件 mars 系列的设计和方案进行编码和优化;具体可先参考腾讯微信关于这块的实验和设计。


分割线

当当当,下班了,若自己需要扩展其他功能,请download源码后自己改造,其源码分层明确易懂,代码注释详细,代码关系层统一。就这个问题不得不鄙视下那些牛逼框架的源码,基本不给人看的那种,要看也得去一头的头皮屑。hi man,fuck。

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

有问题或者建议邮,wenzhonghu@qq.com

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,504评论 4 365
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,898评论 1 300
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,218评论 0 248
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,322评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,693评论 3 290
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,812评论 1 223
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,010评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,747评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,476评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,700评论 2 251
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,190评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,541评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,206评论 3 240
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,129评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,903评论 0 199
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,894评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,748评论 2 274

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,039评论 1 32
  • 新绿轻柔,雕梁画栋人眉妩。画桥久伫,却忘天昏暮。 最苦别离,有恨朝谁诉?叶不语。相思几缕,和叶随风去。 (词林正韵...
    云淡风轻110阅读 425评论 48 65
  • 从早坚持到晚,从夜坚持到黎明。 坚持以后,还有坚持。 如果生活认为我还不够坚强,一定要把我淬炼成强者之一,我不会再...
    面包婶阅读 341评论 0 1
  • 在我大约四五岁的时候,我们村里只有几台电视机,而我家是没有电视的。那时候村民们都对电视这个感到无比新奇,家里置办了...
    韩天真的小小世界阅读 342评论 0 2