网络请求取消机制的设计

原创
2017/11/17 23:57
阅读数 362

网络请求取消机制的设计

背景

1. 前端开发,我们时常要遇到一种网络操作:取消网络请求。
   ASI、AFN等网络框架都提供了cancel机制。因此,实际上我们面对的问题是“how to find that Request and Cancel it”。
2. 而大部分我接触到的项目,曾经的实现都缺乏良好的“取消操作”设计或者干脆没有。
3. 其实,许多操作都涉及到两面:发送与取消。
4. 相比较其他操作,网络请求更偏向无状态,难跟踪与管控。比如一个Get HTTP请求,一旦发送出去,便无法取消。

任务

1. 设计一套机制,实现取消曾经发出的网络请求。

分析

1. 问题的关键在于:存储UI<--->Request,一对一关系。当保存了这份关系图之后,就可以方便的CRUD操作,并且在框架提供的cancel机制上,实现取消指定请求的功能。
2. 由于UI可能性的短暂生命周期的原因,并不适合直接保存它以及请求之间的关系。
   那么,就应该选择一个不会变化的量,来建立与Request的对应关系,同时这个量不会因为UI生命周期变动而发生变动(这个变动指用户角度的变化)。
3. 另外,这个量应该是全局唯一的。因为这应该是一个集中式控制中心。
   综上所述,Request parameter是比较好的选择。
4. 以OC为例,从效率看,字典在CRUD效率上很好,是比较合适的存储这个关系。

具体设计

1. ControllerCenter Class
   attribute:
   		relationship Dictionary
   method:
   		-add,create and store relationship in dic.
   		-remove,select and delete relationship in dic.
   		-select,condition retrieve request.
   		-keydigest,obtain key digest and use digest for dic key.

网络请求取消机制设计

结果

1. 完成逻辑简图,设计了控制中心类。
2. 按照以上分析与设计,实现控制中心类,就可以实现出取消机制。同时,结合发送和回调,就形成一个完整的网络请求控制中心。
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部