网络框架重构设计

一、背景

网络管理层是各上层业务都要用到的层级,为提供更高效率、更高质量的服务,需对网络服务层进行重构。

二、重构目标

1、提供连接管理

在App整个运行过程中,始终向上层业务提供两条有效的长连接(云端连接和路由器连接),并支持在网络断开、心跳失败后的重连机制.

2、自动登陆(已实现)

在长连接重建后, 自动登陆服务器.

3、自动同步(已实现)

在长连接重建后、并自动登陆服务器后, 自动同步本地信息到云平台/路由器.

4、网络服务代理层RemoteProxy

RemoteProxy作为对上层业务的唯一网络接口, 向上层业务提供获取业务数据的网络访问接口, 使上层业务无需关心网络访问的细节, 其内部实现了连接管理等功能.

5、独立出同步功能

同步功能从ControlPad和logincenter中抽取出来,作为独立的公共库hdsync

三、重构方案

3.1
网络整体框架构思

图1为《智能家居APP架构说明》中描述的网络整体框架构思图,本方案基于此架构构思进行设计。

图1网络整体框架

p { margin-bottom: 0.25cm; direction: inherit; line-height: 120%; text-align: center }

3.2 网络框架工作流程

图2描述了网络库重构方案的原理主流程。

       本次网络库重构,重点在于网络连接管理,网络连接管理主要处理两种场景:网络发生变化和心跳包异常。

在网络状态监听器发现网络发生变化时,如果网络断开,此时网络库会重置同云平台和路由器长连接的状态;如果网络恢复连接,则网络库会尝试重新与云平台和路由器建立新的长连接,在同云平台和路由器建立新的长连接后,网络库将调用logincenter库的登陆逻辑,以自动登陆云平台和路由器,待登陆成功后,便将本地信息同步到云平台和路由器。

h2 { direction: inherit; text-align: center }
h2.western { font-family: "Liberation Sans", sans-serif; font-size: 16pt }
h2.cjk { font-size: 16pt }
h2.ctl { font-size: 16pt }
p { margin-bottom: 0.25cm; direction: inherit; line-height: 120%; text-align: center }

h1 { margin-bottom: 0.21cm; direction: inherit; text-align: center }
h1.western { font-family: "Liberation Sans", sans-serif; font-size: 18pt }
h1.cjk { font-family: "宋体"; font-size: 18pt }
h1.ctl { font-family: "Noto Sans CJK SC Regular"; font-size: 18pt }
h2 { direction: inherit; text-align: center }
h2.western { font-family: "Liberation Sans", sans-serif; font-size: 16pt }
h2.cjk { font-size: 16pt }
h2.ctl { font-size: 16pt }
p { margin-bottom: 0.25cm; direction: inherit; line-height: 120%; text-align: center }
a:link { }

图2 网络库重构方案主流程

p { margin-bottom: 0.25cm; direction: inherit; line-height: 120%; text-align: center }

图3描述了心跳检测机制,网络库每隔60s发送一次心跳检测包,然后将heartBeatFlag减1, heartBeatFlag初值为3, 当收到云平台/路由器的心跳响应时,网络库将 heartBeatFlag重新设置为3。如果网络库连发三个心跳包都没有收到云平台/路由器的心跳响应,那么网络库在准备发第四个心跳检测包前,会重置云平台/路由器的长连接状态(断开连接并发出长连接断开通知)。

p { margin-bottom: 0.25cm; direction: inherit; line-height: 120%; text-align: center }

图3心跳检测机制

p { margin-bottom: 0.25cm; direction: inherit; line-height: 120%; text-align: center }

3.3 网络库框架

图3描述了网络库框架的架构设计。

图3中粉色背景部分为本次网络库重构的新增(修改)部分,构建RemoteProxy(远程服务代理)类,

RemoteProxy类的功能如下:

  • 作为网络库与上层业务唯一的通信接口;管理TCP连接的建立、连接、维护、关闭;
  • 自动接入Sec、LB、Biz服务器;
  • 可自动路由业务TCP命令走云平台或路由器;
  • 监听网络状态;
  • 维持有效的同云平台、路由器的长连接。

图3中黄色背景部分为工程代码间的相互移动部分,HdNetworkService原来位于主工程ControlPad中,由于其功能逻辑与网络库(心跳发送)密切相关,故本次重构会将其移动至网络库hdnetworklib中。

h2 { direction: inherit; text-align: center }
h2.western { font-family: "Liberation Sans", sans-serif; font-size: 16pt }
h2.cjk { font-size: 16pt }
h2.ctl { font-size: 16pt }
p { margin-bottom: 0.25cm; direction: inherit; line-height: 120%; text-align: center }

图3网络库框架

p { margin-bottom: 0.25cm; direction: inherit; line-height: 120%; text-align: center }

图4描述了网络库框架同其他库的关系。

图4中的粉色部分为本次重构新增的部分,除前面介绍的网络库新增、修改、移动的代码部分,还包括将原网络库中DeviceManager、FamilyManager、RoomManager、UpgradeManager等与具体业务强相关的管理类移到ControlPad主工程。

此外,将信息同步的代码逻辑从logincenter中抽取出来,形成独立的信息同步模块hdsync。

从图4中可看出,重构后的网络库,可面向除XXXHome外不同的App。

p { margin-bottom: 0.25cm; direction: inherit; line-height: 120%; text-align: center }

图4网络库框架同其他库的关系

图5描述了重构前的网络库类结构及与其他库的关系。

图5中用红色标示的类为归类存放不合理的类,在本次重构时需要调整其存放位置,以SyncTaskService和LoginStatusReceiver为例子,其原来的设计目的是为了监听用户登陆成功的消息后,便通知同步任务服务去做同步信息相关的事情,但现在SyncTaskService和LoginStatusReceiver存放在主工程ControlPad中,考虑到同步功能应独立出来作为一个模块,也便于今后对同步模块的需求做进一步扩展,故本次需对分散在ControlPad和hdlogincenter同步代码进行抽取,然后归集在hdsync模块。

图5 重构前网络库类结构及与其他库的关系

p { margin-bottom: 0.25cm; direction: inherit; line-height: 120%; text-align: center }

图6 描述了重构后的网络库类结构及与其他库的关系。

图6 黄色背景标识的类为本次重构新增的类,RemoteProxy为网络访问的唯一入口,RouteStrategy为选择云平台还是路由器通道的路由功能类,CloudRemote维护了一条云平台长连接和经由该长连接与云平台通信的逻辑、RouteRemote维护了一条路由器长连接和经由该长连接与路由器通信的逻辑。

p { margin-bottom: 0.25cm; direction: inherit; line-height: 120%; text-align: center }

图6重构后网络库类结构及与其他库的关系

图7为图6的详细类图,描述了重构后网络库详细类图及与其他库的关系。

p { margin-bottom: 0.25cm; direction: inherit; line-height: 120%; text-align: center }

图7重构后网络库详细类图及与其他库的关系

图8描述了在网络良好情况下,重构后的网络库发送Tcp请求的时序图。

图9描述了在网络不好情况下,重构后的网络库发送Tcp请求的时序图。

p { margin-bottom: 0.25cm; direction: inherit; line-height: 120%; text-align: center }

p { margin-bottom: 0.25cm; direction: inherit; line-height: 120%; text-align: center }

图8重构后发送Tcp请求的时序图(网络良好)

p { margin-bottom: 0.25cm; direction: inherit; line-height: 120%; text-align: center }

图9重构后发送Tcp请求的时序图(网络不好)

p { margin-bottom: 0.25cm; direction: inherit; line-height: 120%; text-align: center }

3.4 后台服务接入流程改造(建议)

h2 { direction: inherit; text-align: center }
h2.western { font-family: "Liberation Sans", sans-serif; font-size: 16pt }
h2.cjk { font-size: 16pt }
h2.ctl { font-size: 16pt }
p { margin-bottom: 0.25cm; direction: inherit; line-height: 120%; text-align: center }

p { margin-bottom: 0.25cm; direction: inherit; line-height: 120%; text-align: center }

目前网络库连接Sec、LB、BIZ服务器需要建立3次TCP连接,有以下缺点:

p { margin-bottom: 0.25cm; direction: inherit; line-height: 120%; text-align: center }

  • 不安全

将Sec服务器、LB服务器地址暴露在网络上,易遭到黑客攻击。

  • 降低效率
  • 影响用户体验

使用户的等待时间加长,并产生更多的流量。

  • 不利于后期运营维护

Sec服务器、LB服务器域名发生变更,App必须重新发包。

建议和云服务沟通,将模式修改为建立一个代理服务器,由代理服务器完成与Sec、LB服务器的通信,App只需访问代理服务器以获取BIZ地址并建立与BIZ的长连接,参见图10后台服务接入模式新旧方案对比。

图10 后台服务接入模式新旧方案对比

p { margin-bottom: 0.25cm; direction: inherit; line-height: 120%; text-align: center }

四、总结

h1 { margin-bottom: 0.21cm; direction: inherit; text-align: center }
h1.western { font-family: "Liberation Sans", sans-serif; font-size: 18pt }
h1.cjk { font-family: "宋体"; font-size: 18pt }
h1.ctl { font-family: "Noto Sans CJK SC Regular"; font-size: 18pt }
p { margin-bottom: 0.25cm; direction: inherit; line-height: 120%; text-align: center }

p { margin-bottom: 0.25cm; direction: inherit; line-height: 120%; text-align: center }
--
--> { }

原文地址:https://www.cnblogs.com/tgltt/p/9542709.html

时间: 2024-11-03 05:44:26

网络框架重构设计的相关文章

Java集合框架---重构设计

面向接口编程: 接口类型 变量 =new 实现类(); List  list=new ArrayList(); --------------------------------------- List实现类的特点与性能分析 -------------------------------------- 三者共同的特点和遵循的规范: 1):允许元素重复: 2):记录元素的先后添加顺序 -------------------------------------- vector类: 底层才有数组结构算法

[连载]《C#通讯(串口和网络)框架的设计与实现》-4.设备驱动管理器的设计

目       录 第四章           设备驱动管理器的设计... 2 4.1           接口定义... 2 4.2           设备容器... 7 4.3           生成设备ID.. 7 4.4           对设备容器操作的互斥... 8 4.5           获得设备列表... 8 4.6           设备计数器的特殊用处... 8 4.7           小结... 10 第四章     设备驱动管理器的设计 设备驱动管理器是对

[连载]《C#通讯(串口和网络)框架的设计与实现》- 0.前言

                              目       录 前言 前言 刚参加工作,使用过VB.VC开发软件,随着C#的崛起,听说是C++++,公司决定以后开发软件使用C#,凭借在书市5块钱买C#编程入门书籍,开始了职业生涯.开发C/S.B/S结构的软件是必不可少的,又涉及到Remoting.WebService.线程.异步等不知所云的技术.到现在为止,不敢妄称精通,却也使用熟练:研读Framework源代码,不敢说全部搞懂,却对技术提高有很大帮助. 身在传统行业,确实感觉到

Java EE 架构设计——基于okhttp3 的网络框架设计

转载请注明出处:http://blog.csdn.net/smartbetter/article/details/77893903 本篇文章带大家设计一套满意业务需求.代码健壮高效(高内聚低耦合)并且可拓展的网络框架.以最新的okhttp3为基础设计出高效可靠的网络缓存.多线程文件下载等架构模块.从此不局限于使用别人的框架,而步入了设计框架,让自己可以走的更远,我觉得这才是一名合格开发者所应该具备的能力.在开发中,选择一个开源框架的标准有很多,例如学习成本.文档是否齐全.github星数量.现在

[连载]《C#通讯(串口和网络)框架的设计与实现》- 11.调试器的设计

目       录 第十一章     调试器设计... 2 11.1         调试接口... 2 11.2         界面方式调试... 3 11.3         命令行方式调试... 5 11.4         小结... 6 第十一章      调试器设计 SuperIO 框架平台设计.开发完毕后,想把代码编译成程序集(DLL),二次开发都通过引用DLL实现接口.继承类库来实现驱动和插件的开发,SuperIO框架的代码不会轻易去改变.这是框架设计最终要达到的效果,但是在二

教你写Android网络框架之基本架构

转载请注明出处,本文来自[ Mr.Simple的博客 ]. 我正在参加博客之星,点击这里投我一票吧,谢谢~ 前言 在前段时间,偶然参加了博客之星的评选,也偶然的进入到了鸿洋和任玉刚两知名博主的开发群,感受到了很浓厚的技术探讨氛围,于是自己也冒出了写一些系列博客的想法.虽说本人水平有限,但是也希望自己的博客能够帮到一些需要帮助的人.需要你是高手,那么显然不适合你,就没有必要再看下去了.如果你对框架开发或者说Android网络请求不是很了解,每次要使用网络时都要到百度搜索一番,那么着可能是你需要的.

发布C++实现的TCP网络框架Khala

1.Khala简介 Khala(卡拉)是用C++实现的TCP网络框架.底层采用muduo网络库作为网络IO+线程模型,并封装实现了网络实现与业务逻辑分离的多线程网络框架,具有超时退出.多设备多事件注册支持.设备生命周期管理.设备间通信等功能. 项目托管地址:https://github.com/moyangvip/khala 2.底层支持 Khala底层采用muduo作为网络IO支持.muduo类似于市面上一些常用开源event-driven网络库(如libevent),实现了基于Reactor

基于NIO的Netty网络框架

Netty是一个高性能.异步事件驱动的NIO框架,它提供了对TCP.UDP和文件传输的支持,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果. Netty的优点有: a.功能丰富,内置了多种数据编解码功能.支持多种网络协议. b.高性能,通过与其它主流NIO网络框架对比,它的综合性能最佳. c.可扩展性好,可通过它提供的ChannelHandler组件对网络通信方面进行灵活扩展. d.易用性,API使用简单.

记一次和阿里某总监对话引发的思考:说说你框架的设计思路和优点亮点!

背景: 前不久和阿里的一个技术总监风动聊的时候,他问了这样一个问题:说说你框架的设计思路和优点? 话说,这个问题,5年前开始就一直经常出现在眼前,可我从没认真为它找出过答案! 于是,夜深深,我躺在床上,用笔记本,一边思考,一边打字,试着找寻! 这些年来,我的框架或作品,都快凑满十二个了,每个单独都可以说上好几天. 但如果时间只有半小时,我要怎么介绍呢?介绍哪些呢? 出现在脑海里的框架有三个:CYQ.Data.ASP.NET Aries.Taurus.MVC. 大概是因为近期的精力都在这上面吧的吧