實(shí)現(xiàn)功能
根據(jù)用戶配置的不同的Listener(TcpListener、TlsTcpListener、WebsocketListener、TlsWebsocketListener),為pipeline中添加不同的Handler
實(shí)現(xiàn)步驟
1、根據(jù)Listener不同,生成不同的Handler
2、加入到pipeline中,讓其為每一個(gè)客戶端服務(wù)
類圖
ssl
由上圖可以看出針對不同的Listener都會有對應(yīng)類型的ChannelInitializer去初始化Transport Channel,明白這一點(diǎn),那就好理解了。
1、ChannelInitializerFactory是AbstractChannelInitializer的一個(gè)工廠類,針對不同的Listener,可以生成不同的ChannelInitializer。
2、ChannelInitializerFactory去判斷Listener類型,去創(chuàng)建對應(yīng)的AbstractChannelInitializer,
TlsTcpChannelInitializer、
WebsocketChannelInitializer、
TlsWebsocketChannelInitializer都是AbstractChannelInitializer的實(shí)現(xiàn)類。
3、通過實(shí)現(xiàn)AbstractChannelInitializer的initTransportChannel,將對應(yīng)的Handler加入到pipeline中。
4、若是TcpListener、WebsocketListener,則將NoSslHandler加入到pipeline中,來阻止ssl連接
這里寫圖片描述
5、SslContextStore是持有Tls和SslContext的映射關(guān)系的一個(gè)倉庫,加單點(diǎn)說就是key為Tls,value為SslContext的map的封裝類。
6、SslFactory通過Channel和Tls創(chuàng)建SslHandler,并設(shè)置SSLEngine,
以達(dá)到SSL認(rèn)證,具體的認(rèn)證過程以及處理都是屬于標(biāo)準(zhǔn)ssl處理流程,
使用netty的SslHandler去完成,什么是雙向認(rèn)證、單向認(rèn)證等概念,
就需要大家自行研究,不屬于本博文的內(nèi)容。