网络请求取消机制的设计
背景
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.
![网络取消机制设计 网络请求取消机制设计](https://i-blog.csdnimg.cn/blog_migrate/2ae174c6ad4b61c7d18f27fe07214bf1.png)
结果
1. 完成逻辑简图,设计了控制中心类。
2. 按照以上分析与设计,实现控制中心类,就可以实现出取消机制。同时,结合发送和回调,就形成一个完整的网络请求控制中心。