MQTT---HiveMQ源代码具体解释(七)Netty-SSL/NoSSL

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

时间: 2025-01-04 07:44:44

MQTT---HiveMQ源代码具体解释(七)Netty-SSL/NoSSL的相关文章

Spring IOC源代码具体解释之容器初始化

Spring IOC源代码具体解释之容器初始化 上篇介绍了Spring IOC的大致体系类图,先来看一段简短的代码,使用IOC比較典型的代码 ClassPathResource res = new ClassPathResource("beans.xml"); DefaultListableBeanFactory factory = new DefaultListableBeanFactory(); XmlBeanDefinitionReader reader = new XmlBea

Spring IOC源代码具体解释之容器依赖注入

Spring IOC源代码具体解释之容器依赖注入 上一篇博客中介绍了IOC容器的初始化.通过源代码分析大致了解了IOC容器初始化的一些知识.先简单回想下上篇的内容 加载bean定义文件的过程.这个过程是通过BeanDefinitionReader来完毕的.当中通过 loadBeanDefinition()来对定义文件进行解析和依据Spring定义的bean规则进行处理 - 其实和Spring定义的bean规则相关的处理是在BeanDefinitionParserDelegate中完毕的,完毕这个

MQTT---HiveMQ源代码具体解释(一)概览

源博客地址:http://blog.csdn.net/pipinet123 MQTT交流群:221405150 面向群体 想自己实现MQTT Broker的朋友 对现有开源的MQTT Broker或多或少有些不惬意的朋友 简介 HiveMQ是企业级MQTT Broker,提供高性能.高可用.高扩展.高安全性的企业级服务. 它是纯Java实现的. 官网地址:http://www.hivemq.com 基于它如上的描写叙述.所以兴许我们就是基于它的高性能.高可用.高扩展.高安全性这几个特点来分析它的

MQTT---HiveMQ源代码具体解释(八)Netty-WebSocket

源博客地址:http://blog.csdn.net/pipinet123 MQTT交流群:221405150 基于netty实现Webscoket相对来说就是相当简单,所以本讲中就不搞太复杂的了,给大家看一个类图,和一段给pipeline加入handler,就能够全然了解hivemq怎样处理的了,事实上跟差点儿全部须要使用netty去支持websocket的处理一致. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGlwaW5ldDEyMw==/f

netty ssl

netty提供的例子中有secury的实现,不过是一个伪证书.修改了一下其中的SecureChatSslContextFactory类,使用证书的方式实现ssl.修改后代码如下: public final class SecureChatSslContextFactory { private static final String PROTOCOL = "SSL"; //private static final String PROTOCOL = "TLS"; pr

Spring IOC源代码具体解释之整体结构

Spring ICO具体解释之整体结构 IOC介绍 IOC, spring的核心.贯穿Spring始终.直观的来说.就是由spring来负责控制对象的生命周期和对象间的关系,将对象之间的关系抽象出来.通过spring容器控制对象生成时机,降低对象之间的耦合度. 开启Spring IOC源代码学习 SpringIOC 的主要依赖源代码是 spring-beans 和 spring-context两个包.前面文章中曾今讲到了怎样编译spring源代码,接下来将maven后的project导入ecli

dlmalloc 2.8.6 源代码具体解释(6)

本文章由vector03原创, 转载请注明出处. 邮箱地址: [email protected], 欢迎来信讨论. 3.4 sys_alloc sys_alloc是dlmalloc中向系统获取内存的主要接口. 因为涉及到mmap, top-most segment, top chunk的交互, 相对要更复杂. 我们相同先介绍主要分配算法, 再具体分析子函数. 3.4.1 核心算法 基本上sys_alloc分为四个步骤, 1. 首先检查请求大小nb是否超出mmap_threshold的阈值. 假设

three.js 源代码凝视(七)Math/Euler.js

商域无疆 (http://blog.csdn.net/omni360/) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:商域无疆 -  本博客专注于 敏捷开发及移动和物联设备研究:数据可视化.GOLANG.Html5.WEBGL.THREE.JS,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 下面代码是THREE.JS 源代码文件里Math/Quaternion.js文件的凝视. 很多其它更新在 : https://github.com/omni360/th

dlmalloc 2.8.6 源代码具体解释(5)

本文章由vector03原创, 转载请注明出处. 邮箱地址: [email protected], 欢迎来信讨论. ? ? 3. 分配及实现 本章节介绍dlmalloc的分配算法和实现.由于存在多mspace的情况, dlmalloc使用了两套API.一套相应默认的mspace,以dl前缀开头,如dlmalloc, dlrealloc等.假设创建了自己定义的mspace,则使用mspace开头的API,如mspace_malloc, mspace_realloc等.但两套API在基础算法上是一致