Netty4源码阅读
个人对netty的理解
平凡的L同学
个人感兴趣的方向:云计算网络,SDN,网络操作系统,量子通信,机器学习,欢迎讨论。
展开
-
Netty源码阅读之NioEventLoop简析
在Netty中NioEventLoop以及NioEventLoopGroup是很重要的两个类,而NioEventLoopGroup主要是对NioEventLoop进行管理;首先来看一下这两个类的关系图(错综复杂): 图 11. NioEventLoopGroup初始化流程通过分析NioEven...原创 2020-06-25 21:08:15 · 453 阅读 · 0 评论 -
Netty源码阅读之编码器简析
上回主要聊了一下Netty中的解码器,那么既然有解码,必须也必须得聊下编码过程了,下面将对Netty中的编码器作一下总结:1.编码器简介作为解码的逆过程,编码的目的主要是将消息转换为字节或者消息,Netty中主要使用了MessageToByteEncoder这个抽象类来规定处理编码的一些流程,不妨先来看下该类的UML:可以看出编码器其实也只是一类特殊的ChannelHandler,使用encode()方法来处理编码相关的逻辑,不妨先自定义一个编码器然后写一段demo:1.1...原创 2020-06-07 16:46:09 · 525 阅读 · 0 评论 -
Netty源码阅读之解码器简析
通过网络传输过来的数据,需要通过netty中的解码器进行处理,其中抽象类ByteToMessageDecoder中定义了相应的处理方法。不妨先来围观下该类的继承关系:由上图可以明白,该类实现了ChannelHandler这个接口,所以,说到底,解码器就是一个特殊的handler而已。查看channelRead()方法:public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {原创 2020-05-26 00:07:08 · 447 阅读 · 0 评论 -
Netty源码阅读之ByteBuf简析(二)
前面对于Netty中的ByteBuf缓存做了一下简单的介绍,下面将围绕源码,对于其中的几个特性进行分析。1.扩容机制首先来聊下Bytebuf的扩容机制,这个机制也是Netty比较强悍的地方,而我们知道JDK自带的ByteBuffer是无法扩容的,在Bytebuf创建的时候,我们通常会设置一个初始容量,在我们写数据的时候,如果写指针超过了设置的初始容量,那么Bytebuf将进行扩容,废话不多说,下面我们直接通过源码来一探究竟吧:public ByteBuf writeBytes(ByteBuf原创 2020-05-10 22:09:35 · 651 阅读 · 0 评论 -
Netty源码阅读之ByteBuf简析(一)
在Netty中ByteBuf主要是用于数据的中转,底层IO将数据读取到ByteBuf,之后传输给应用程序;而应用程序在处理完之后将数据封装成ByteBuf发送给底层IO。在介绍ByteBuf具体的实现之前,让我们先来查看一下相关类的关系图:...原创 2020-05-05 22:07:55 · 360 阅读 · 0 评论 -
Netty源码阅读之事件传输机制的简要分析
前面提到,ChannelHandler可以用来处理inBound以及outBound事件;而inBound以及outBound事件的流转也是Netty中比较重要的一环;下面,将对Netty源码中对事件的传输机制进行简要的分析:在Netty的事件传播过程中,总共有两种的传播方式,第一种方式是调用pipeline进行传播,另外的一种是直接以pipeline中的某个Context作为起始进...原创 2020-04-19 19:32:31 · 733 阅读 · 1 评论 -
Netty源码阅读之Pipeline中添加以及删除ChannelHandler流程总结
1.简要介绍 首先,ChannelHandler主要的作用是用来处理inbound或者outbound事件,调用者可以通过ch.pipeline().addLast()来进行添加,我们可以通过一张经典图例来认识一下ChannelHandler、pipeline、以及ChannelHandlerContext之间的关系: 通过上图,我们知道,Channel以及pipel...原创 2020-04-04 22:04:41 · 657 阅读 · 0 评论 -
Netty源码阅读之Pipeline初始化流程
1.Pipe的创建时机Pipe的创建是在AbstractChannel类的构造函数中完成的:protected AbstractChannel(Channel parent) { this.parent = parent; id = newId(); unsafe = newUnsafe(); pipeline = newC...原创 2020-03-29 19:34:25 · 396 阅读 · 0 评论