
今天我们来聊聊,Envoy 中最重要的抽象 Filter
FilterChainManager
书接上文 Around Envoy 我们已知 Envoy 是一个基于 FilterChain 的系统。
Envoy 做了简单的抽象,把 Filter 相关的逻辑都至于 filter.h 中,在这个简单的抽象中,我们可以发现
Filtergithub1
| class Filter : public WriteFilter, public ReadFilter {};
|
Filter 这层抽象就是由 WriteFilter 和 ReadFilter 组合而来
ReadFiltergithub1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class ReadFilter { public: virtual ~ReadFilter() = default;
virtual FilterStatus onData(Buffer::Instance& data, bool end_stream) PURE;
virtual FilterStatus onNewConnection() PURE;
virtual void initializeReadFilterCallbacks(ReadFilterCallbacks& callbacks) PURE; };
class WriteFilter { public: virtual ~WriteFilter() = default;
virtual FilterStatus onWrite(Buffer::Instance& data, bool end_stream) PURE;
virtual void initializeWriteFilterCallbacks(WriteFilterCallbacks&) {} };
|