envoy源代码分析(六)--listener与endpoint

 

工厂

有一批工厂类,都是静态的,可以通过名字获取它们,如:

 Factory* factory = Registry::FactoryRegistry<Factory>::getFactory(name);

它们的定义,是通过宏完成的:

REGISTER_FACTORY(DefaultListenerManagerFactoryImpl, ListenerManagerFactory);

宏展开之后类似:

static ::Envoy::Registry::RegisterFactory<MyFilterFactory, NamedHttpFilterConfigFactory> MyFilterFactory_NamedHttpFilterConfigFactory_registered_;

 

既然可以用名字获取,也自然能在配置中反射。其方法叫做typed_config

https://www.envoyproxy.io/docs/envoy/v1.34.1/configuration/overview/extension.html

具体的代码实现:

类型字符串是注册工厂类时候的名字, 见函数

 

见父类的定义,有个名字name和类型category

 

定义工厂的时候,进行赋值

 

 

又比如,default_local_address_selector的名字

 

Listener

listener可以对应配置中的LDs,用于接收配置并更新至转发流程中。

 

EndPoint

endpoint是实现在upstream包里的,挂在cluster数据结构下,它的实体类是HostImpl

关键函数是createConnection()

 

posted on 2025-05-13 11:51  toong  阅读(4)  评论(0)    收藏  举报