traffic server 之 backgroud fetch插件

3180阅读 0评论2016-04-08 oxwangfeng
分类:架构设计与优化



具体流程:

1.TSPluginInit函数中在TS_HTTP_READ_RESPONSE_HDR_HOOK阶段定义一个Hood,函数名字叫cont_handle_response;这个是在read response hdr阶段的钩子函数;

2. cont_handle_response函数中,根据event类型来处理不同的事件;我们要处理的事件集中在读响应头阶段(即TS_EVENT_HTTP_READ_RESPONSE_HDR);

3.获取从源站发过来的response ,然后获取状态码,如果状态码是206,则我们在发送响应头阶段(即TS_HTTP_SEND_RESPONSE_HDR_HOOK)创建一个钩子函数cont_check_cacheable

4.顺便说一下,源站返回206,在本插件中有两种情况,第一种是第一次range请求的时候,第二次是回源并且源站的内容发生修改的时候(回源并且源站不修改返回状态码304);

5. cont_check_cacheable函数,调用BgFetchData::initialize函数和BgFetchData::acquireUrl函数;

6.BgFetchData::initialize中,copy requestheadermbuf中,并且删除range头部;

  新建立一个url,只是去掉了range头部,host头部和以前一样;

curl -i -H "host:" 

7.BgFetchData::acquireUrl中,如果urlOutstandingRequests不存在,则添加requesturlOutstandingRequests中;

8.206状态码,若有多并发,第一次并发,才会调用schedule(第一次调用data->acquireUrl()才为true);

9.进入schedule函数,建立一个状态机,状态机函数为cont_bg_fetch;并且立即执行这个状态机函数;

10.cont_bg_fetch,由于eventTS_EVENT_IMMEDIATE,所以立即执行了;

11.http访问结束时,将urlOutstandingRequests中删除;

上一篇:traffic server 插件基础及Transformations
下一篇:利用shared_ptr实现写时复制技术