http connection manager#

首先,http connection manager(HCM) 在 Listener 的角度看,是一个 Network Filter。

为了扩展性,Envoy 的 http connection manager 采用了经典的 filter chain 设计模式。这个和 Listener Filter Chain 有一点类似:

图:http connection manager 设计模型

图:http connection manager 设计模型#

用 Draw.io 打开

请求 filter 流如下:

图源:life_of_a_request

响应 filter 流如下:

图源:life_of_a_request

http filter 抽象对象定义#

HttpFilter 在源码中叫 StreamFilter 或更精确叫 Http::StreamFilterBase 。一个 http connection manager 拥有一个 Http::FilterManagerFilterManager 拥有 list<StreamFilterBase*> filters_

图:http filter 抽象对象

图:http filter 抽象对象#

用 Draw.io 打开

http filter C++类关系#

图:http filter C++类关系

图:http filter C++类关系#

用 Draw.io 打开