摘要:
ByteBuf的I/O主要解决的问题有两个: 管理readerIndex和writerIndex。这个在在AbstractByteBuf中解决。 从内存中读写数据。ByteBuf的不同实现主要使用两种内存:堆内存表示为byte[];直接内,可能是Dir 阅读全文
摘要:
netty ByteBuf的设计原理 阅读全文
摘要:
本章不会直接分析Netty源码,而是通过使用Netty的能力实现一个自定义协议的服务器和客户端。通过这样的实践,可以更深刻地理解Netty的相关代码,同时可以了解,在设计实现自定义协议的过程中需要解决的一些关键问题。 本周章涉及到的代码可以从github上下载: https://github.com 阅读全文
摘要:
数据包编解码过程中主要的工作就是:在编码过程中进行序列化,在解码过程中从Byte流中分离出数据包然后反序列化。在MessageToByteEncoder中,已经解决了序列化之后的问题,ByteToMessageDecoder中已经部分第解决了从Byte流中分离出数据包的问题。实现具体的数据包编解码, 阅读全文
摘要:
编解码框架和一些常用的实现位于io.netty.handler.codec包中。 编解码框架包含两部分:Byte流和特定类型数据之间的编解码,也叫序列化和反序列化。不类型数据之间的转换。 下图是编解码框架的类继承体系: 其中MessageToByteEncoder和ByteToMessageDeco 阅读全文
摘要:
io.netty.handler.timeout.IdleStateHandler功能是监测Channel上read, write或者这两者的空闲状态。当Channel超过了指定的空闲时间时,这个Handler会触发一个IdleStateEvent事件。 在第一次检测到Channel变成active 阅读全文
摘要:
本章开始分析ChannelHandler实现代码。ChannelHandler是netty为开发者提供的实现定制业务的主要接口,开发者在使用netty时,最主要的工作就是实现自己的ChannelHandler。ChannelHandler在设计上需要和ChannelPipeline配合共同实现pip 阅读全文
摘要:
写数据是NIO Channel实现的另一个比较复杂的功能。每一个channel都有一个outboundBuffer,这是一个输出缓冲区。当调用channel的write方法写数据时,这个数据被一系列ChannelOutboundHandler处理之后,它被放进这个缓冲区中,并没有真正把数据写到soc 阅读全文
摘要:
本章分析Nio Channel的数据读取功能的实现。 Channel读取数据需要Channel和ChannelHandler配合使用,netty设计数据读取功能包括三个要素:Channel, EventLoop和ChannelHandler。Channel有个read方法,这个方法不会直接读取数据, 阅读全文
摘要:
Channel提供了3个方法用来实现关闭清理功能:disconnect,close,deregister。本章重点分析这个3个方法的功能的NIO实现。 disconnect实现: 断开连接 disconnect方法的调用栈如下: disconnect稍微复杂一些, 在io.netty.channel 阅读全文
摘要:
创建一个channel实例,并把它register到eventLoopGroup中之后,这个channel然后处于inactive状态,仍然是不可用的。只有在bind或connect方法调用成功之后才能正常。因此bind或connect算是channel初始化的最后一步,本章这就重点分析这两个功能的 阅读全文
摘要:
结构设计 Channel的NIO实现位于io.netty.channel.nio包和io.netty.channel.socket.nio包中,其中io.netty.channel.nio是抽象实现,io.netty.channel.socket.nio最终实现。下面是Channel NIO相关类的 阅读全文
摘要:
事件触发、传递、处理是DefaultChannelPipleline实现的另一个核心能力。在前面在章节中粗略地讲过了事件的处理流程,本章将会详细地分析其中的所有关键细节。这些关键点包括: 事件触发接口和对应的ChannelHandler处理方法。 inbound事件的传递。 outbound事件的传 阅读全文
摘要:
io.netty.channel.DefaultChannelPipeline implements ChannelPipleline DefaultChannelPiple给出了ChannelPipleline的默认实现。ChannelPipleline是一个双向链表,本章的内容是分析默认实现中双 阅读全文
摘要:
io.netty.channel.ChannelPipeline 设计原理 <!--5f39ae17-8c62-4a45-bc43-b32064c9388a:W3siYmxvY2tJZCI6Ijc0NzAtMTU0NDcxMDI3ODc5NCIsImJsb2NrVHlwZSI6InBhcmFncmF 阅读全文
摘要:
把NIO事件转换成对channel unsafe的调用或NioTask的调用 processSelectedKeys()方法是处理NIO事件的入口: private void processSelectedKeys() { if (selectedKeys != null) { processSel 阅读全文
摘要:
接口定义 io.netty.channel.EventLoopGroup extends EventExecutorGroup 方法 说明 ChannelFuture register(Channel channel) 把一个channel注册到一个EventLoop ChannelFuture r 阅读全文
摘要:
上一章讲了EventExecutorGroup的整体结构和原理,这一章我们来探究一下它的具体实现。 EventExecutorGroup和EventExecutor接口 io.netty.util.concurrent.EventExecutorGroup java.util.concurrent. 阅读全文
摘要:
派生体系 java.util.concurrent ThreadPoolExecutor AbstractExecutorService ExecutorService Executor 这个类是Executor框的核心实现,它的名字向我们表明,它是使用thread pool实现的。这个thread 阅读全文
摘要:
netty线程体系概览 netty的高并发能力很大程度上由它的线程模型决定的,netty定义了两种类型的线程: I/O线程: EventLoop, EventLoopGroup。一个EventLoopGroup包含多个EventLoop, 每个Channel会被注册到一个,一个EventLoop中, 阅读全文