
今天我们来聊聊,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&) {} };
|