MQTT---HiveMQ源代码具体解释(七)Netty-SSL/NoSSL
2024-10-19 00:10:36
源博客地址:http://blog.csdn.net/pipinet123
MQTT交流群:221405150
实现功能
依据用户配置的不同的Listener(TcpListener、TlsTcpListener、WebsocketListener、TlsWebsocketListener),为pipeline中加入不同的Handler
实现步骤
1、依据Listener不同,生成不同的Handler
2、加入到pipeline中。让其为每个client服务
类图
由上图能够看出针对不同的Listener都会有相应类型的ChannelInitializer去初始化Transport Channel,明确这一点,那就好理解了。
1、ChannelInitializerFactory是AbstractChannelInitializer的一个工厂类,针对不同的Listener,能够生成不同的ChannelInitializer。
2、ChannelInitializerFactory去推断Listener类型。去创建相应的AbstractChannelInitializer,
TlsTcpChannelInitializer、
WebsocketChannelInitializer、
TlsWebsocketChannelInitializer都是AbstractChannelInitializer的实现类。
3、通过实现AbstractChannelInitializer的initTransportChannel。将相应的Handler加入到pipeline中。
4、若是TcpListener、WebsocketListener。则将NoSslHandler加入到pipeline中,来阻止ssl连接
5、SslContextStore是持有Tls和SslContext的映射关系的一个仓库。加单点说就是key为Tls,value为SslContext的map的封装类。
6、SslFactory通过Channel和Tls创建SslHandler,并设置SSLEngine,
以达到SSL认证,详细的认证过程以及处理都是属于标准ssl处理流程。
使用netty的SslHandler去完毕。什么是双向认证、单向认证等概念。
就须要大家自行研究,不属于本博文的内容。
借此我们就能够知道hivemq实际上是通过Listener的类型不同,
创建不同的AbstractChannelInitializer,实现initTransportChannel方法,
去为pipeline中加入SslHandler/NoSslHandler
最新文章
- ASP.NET MVC Model验证(一)
- javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
- jquery--常用的函数2
- lex中yyrestart()的使用
- url中,中文乱码的问题
- 烂泥:vcenter5.5无AD下的安装与配置
- df,du,mount
- 第二十篇:在SOUI中使用分层窗口
- mac mysql connection
- codeforces 340E Iahub and Permutations(错排or容斥)
- QT实现不规则窗体
- 转Android 用Animation-list实现逐帧动画
- 图文详解AO打印(标准模式)
- swoole扩展实现真正的数据库连接池
- 用python一起来看流星雨
- Mac添加环境变量方法
- EtherCAT(扒自百度百科)
- scala变量类型和性质
- 简单的dialog,类似alert弹框
- HwUI下载地址
热门文章
- 【转】python assert用法
- BZOJ 1150 [CTSC2007]数据备份Backup(贪心+优先队列)
- ACM-ICPC 2016亚洲区域赛(沈阳站)游记(滚粗记)
- windows和linux下杀死Tomcat进程,解决端口占用
- #iOS问题记录# UITextview富文本链接,禁止长按事件
- 模仿.Net ThreadPool的线程池控件
- iOS- dispatch_semaphore和NSOperationQueue并发
- 定时任务框架-quartz 时间配置
- Mock -- 数据模拟
- 给ul下的li加click时间