Chinaunix首页 | 论坛 | 博客
  • 博客访问: 432245
  • 博文数量: 43
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 518
  • 用 户 组: 普通用户
  • 注册时间: 2015-12-14 12:10
个人简介

邮箱:oxwangfeng@qq.com

文章分类

全部博文(43)

文章存档

2021年(1)

2018年(7)

2017年(9)

2016年(26)

我的朋友

分类: 架构设计与优化

2016-04-08 12:35:19



具体流程:

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中删除;

阅读(3234) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~