源博客地址: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

最新文章

  1. ASP.NET MVC Model验证(一)
  2. javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
  3. jquery--常用的函数2
  4. lex中yyrestart()的使用
  5. url中,中文乱码的问题
  6. 烂泥:vcenter5.5无AD下的安装与配置
  7. df,du,mount
  8. 第二十篇:在SOUI中使用分层窗口
  9. mac mysql connection
  10. codeforces 340E Iahub and Permutations(错排or容斥)
  11. QT实现不规则窗体
  12. 转Android 用Animation-list实现逐帧动画
  13. 图文详解AO打印(标准模式)
  14. swoole扩展实现真正的数据库连接池
  15. 用python一起来看流星雨
  16. Mac添加环境变量方法
  17. EtherCAT(扒自百度百科)
  18. scala变量类型和性质
  19. 简单的dialog,类似alert弹框
  20. HwUI下载地址

热门文章

  1. 【转】python assert用法
  2. BZOJ 1150 [CTSC2007]数据备份Backup(贪心+优先队列)
  3. ACM-ICPC 2016亚洲区域赛(沈阳站)游记(滚粗记)
  4. windows和linux下杀死Tomcat进程,解决端口占用
  5. #iOS问题记录# UITextview富文本链接,禁止长按事件
  6. 模仿.Net ThreadPool的线程池控件
  7. iOS- dispatch_semaphore和NSOperationQueue并发
  8. 定时任务框架-quartz 时间配置
  9. Mock -- 数据模拟
  10. 给ul下的li加click时间