docs/feature/feature3.0/vfs.md
当前SDK内部发起资源请求的类型主要分为以下几种:
在2.0中对于以上IO资源的请求缺少一套统一管理机制和处理流程,导致很难去全局添加一些监控分析,拦截过滤的处理逻辑,同时由于存在多条资源请求处理分支也会使代码维护成本很高,所以我们在3.0中新增了VFS独立模块,主要模拟类似Virtual file system的机制,对所有IO资源的请求进行统一的管理并提供统一的处理机制,目前3.0所有IO资源的请求已经全部对接到VFS模块。
什么是链式访问
VFS内部实际管理了一个链表,链表中的每个元素是引擎启动时候就注册好的processor,当请求发起者调用VFS接口发起请求后,VFS会遍历这个链表,让processor对request进行处理,request处理完成后,VFS会反向遍历链表,让每个processor对response进行处理,最终返回给请求发起者。
对称链表结构定义
2.0中所以的资源请求都是从JAVA层发起,但3.0由于接入了自绘内核以及dev tools对接C++ dom以后,资源请求有可能从C++层发起,所以JAVA层和C++层各维护了一条VFS链表,形成对称结构:
链表遍历访问规则
所有custom processor都需要extends base processor,base processor定义位于3.0 VFS子工程中 - com.tencent.vfs.Processor,也可以参照同目录下DefaultProcessor的定义 - com.tencent.vfs.DefaultProcessor。
public void handleRequestAsync(@NonNull ResourceDataHolder holder, @NonNull ProcessorCallback callback)
异步处理request,基类默认什么都不处理调用callback.next传递给下一个processor
public boolean handleRequestSync(@NonNull ResourceDataHolder holder)
同步处理request,返回true表示这个请求处理完成不需要再传递给下一个processor,返回false,表示需要递交给下一个processor继续处理
public void handleResponseAsync(@NonNull ResourceDataHolder holder,@NonNull ProcessorCallback callback)
异步处理response,基类默认不对response做任何处理,直接调用callback.onHandleCompleted()递交给上一个processor
public void handleResponseSync(@NonNull ResourceDataHolder holder)
同步处理response,基类默认不做任何处理
public void goNext()
VFS链表正向遍历处理request的时候,当前processor调用该接口表示需要递交给下一个processor继续处理在反向遍历处理response的时候,由于默认会原路返回并传递给请求发起者,所以processor在handleResponse相关接口的重载逻辑中不需要调用该接口,也就是说该接口仅在handleRequest相关接口的重载逻辑中调用才有效
public void onHandleCompleted()
VFS链表正向遍历处理request的时候,当前processor调用该接口表示不在需要递交给下一个processor处理,直接将当前处理结果原路返回给请求发起者。在反向遍历处理response的时候,当前processor调用该接口表示已经完成处理,可以遍历到上一级processor继续处理
在HippyEngine的EngineInitParams初始化参数中增加了设置选项
public List<Processor> processors
引擎初始化阶段会将开发者自定义的processor设置到VFS链表中
关于Devtools processor和Default processor是SDK内部默认添加的,其存放位置不可以更改