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

邮箱:oxwangfeng@qq.com

文章分类

全部博文(43)

文章存档

2021年(1)

2018年(7)

2017年(9)

2016年(26)

我的朋友

分类: 架构设计与优化

2016-04-08 12:30:10


Values for TSHttpHookID

TS_HTTP_CACHE_LOOKUP_COMPLETE_HOOK

在查询完cache以后调用;对应事件TS_EVENT_HTTP_CACHE_LOOKUP_COMPLETE

TS_HTTP_OS_DNS_HOOK

dns查询完毕后调用;对应事件TS_EVENT_HTTP_OS_DNS

TS_HTTP_POST_REMAP_HOOK

remap发生后立即调用,发生在cache查询之前;对应事件TS_EVENT_HTTP_POST_REMAP

TS_HTTP_PRE_REMAP_HOOK

在从源站或者代理中读取响应头以后立即调用;

TS_HTTP_READ_CACHE_HDR_HOOK

cache中读取object的请求头和响应头后立即调用;

TS_HTTP_READ_RESPONSE_HDR_HOOK:

从源站或者proxy读取响应头后立即调用;

TS_HTTP_RESPONSE_TRANSFORM_HOOK

。。。

TS_HTTP_READ_REQUEST_HDR_HOOK:

client读取请求头部后理解调用;

TS_HTTP_REQUEST_TRANSFORM_HOOK

。。。

TS_HTTP_SELECT_ALT_HOOK

。。。

TS_HTTP_SEND_RESPONSE_HDR_HOOK:

proxy的响应头写入到client之前调用;这个hook主要是修改响应头;

TS_HTTP_SEND_REQUEST_HDR_HOOK

proxy的请求头发送到源站或者proxy之前调用;访问cache不会调用这个hook;这个hook主要是在发送到源站或者proxy之前修改proxy的请求头;

TS_HTTP_SSN_CLOSE_HOOK

http session结束的时候调用。当client连接关闭的时候一个会话就会结束,你仅仅能够添加这个hook作为一个全局性的hook

TS_HTTP_SSN_START_HOOK:

http session开始的时候调用。当一个client连接ats的时候session就会开始;这个hook仅能够作为一个全局性的hook

TS_HTTP_TXN_CLOSE_HOOK

http transation结束的时候调用;

TS_HTTP_TXN_START_HOOK

http transaction开始的时候调用。当client连接ats和从连接上获取数据时,transaction开始;或者一个以前的client连接为了保活有新的数据;

Transformationvconn的一个特殊类型;transformation处于输入源和输出数据接收器之间,它能够查看以及修改所有通过这之间的数据。有些transformation简单的扫描这些数据,有些transformation采用了一些方式进行压缩处理;

         Transformation可以修改发送到HTTP client的数据流,也可以修改从HTTP client发送的数据流;

Ats transformation有两个hook: TS_HTTP_REQUEST_TRANSFORM_HOOKTS_HTTP_RESPONSE_TRANSFORM_HOOK




Bnull-transform插件:



Upstream vconn的数据写入transformation,transformation读取数据,然后消费,当消费掉所有的incoming数据后,发送TS_EVENT_VCONN_WRITE_COMPLETE到upstream vconn;

在发送TS_EVNET_VCONN_WRITE_COMPLETE之前,transformation应该检查保留在upstream vconnwrite vio(input vio)的字节数(使用TSVIONTodoGet),当所有的upstream数据被消费掉的时候这个值应该为0 ( TSVIONTodoGet = nbytes - ndone).当这个值为0的时候,状态机状态切换为TS_EVENT_VCONN_WRITE_COMPLETE



         具体处理过程:

         1. input buffercopy数据到output buffer

TSIOBufferCopy (TSVIOBufferGet (data->output_vio),

            TSVIOReaderGet (input_vio), towrite, 0);

         2. 告诉input buffer:transformation已经读取数据了:

                  TSIOBufferReaderConsume (TSVIOReaderGet (input_vio), towrite);

         3. 修改input viondone数据(即已经读取了多少数据)

                  TSVIONDoneSet (input_vio, TSVIONDoneGet (input_vio) + towrite);

         4. 如果还有数据要读(ndone,那么激活downstream vconn,并且发送给upstream vconn一个write ready event

[upstream vconn收到write ready信号后就会继续给transaction写数据了]



         5.当没有数据可读的时候,设置output vconnnbytes=ndone,并且激活output conn;最后发送给input vio一个write complete event



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