2019年9月24日

摘要:     ByteBuf的I/O主要解决的问题有两个: 管理readerIndex和writerIndex。这个在在AbstractByteBuf中解决。 从内存中读写数据。ByteBuf的不同实现主要使用两种内存:堆内存表示为byte[];直接内,可能是Dir 阅读全文
posted @ 2019-09-24 14:47 自带buff 阅读(520) 评论(0) 推荐(0) 编辑

2019年9月21日

摘要: netty ByteBuf的设计原理 阅读全文
posted @ 2019-09-21 13:53 自带buff 阅读(540) 评论(0) 推荐(0) 编辑

2019年9月3日

摘要: 本章不会直接分析Netty源码,而是通过使用Netty的能力实现一个自定义协议的服务器和客户端。通过这样的实践,可以更深刻地理解Netty的相关代码,同时可以了解,在设计实现自定义协议的过程中需要解决的一些关键问题。 本周章涉及到的代码可以从github上下载: https://github.com 阅读全文
posted @ 2019-09-03 16:52 自带buff 阅读(1263) 评论(0) 推荐(1) 编辑

2019年8月29日

摘要: 数据包编解码过程中主要的工作就是:在编码过程中进行序列化,在解码过程中从Byte流中分离出数据包然后反序列化。在MessageToByteEncoder中,已经解决了序列化之后的问题,ByteToMessageDecoder中已经部分第解决了从Byte流中分离出数据包的问题。实现具体的数据包编解码, 阅读全文
posted @ 2019-08-29 15:58 自带buff 阅读(688) 评论(0) 推荐(0) 编辑

2019年8月20日

摘要: 编解码框架和一些常用的实现位于io.netty.handler.codec包中。 编解码框架包含两部分:Byte流和特定类型数据之间的编解码,也叫序列化和反序列化。不类型数据之间的转换。 下图是编解码框架的类继承体系: 其中MessageToByteEncoder和ByteToMessageDeco 阅读全文
posted @ 2019-08-20 14:50 自带buff 阅读(583) 评论(0) 推荐(0) 编辑

2019年8月14日

摘要: io.netty.handler.timeout.IdleStateHandler功能是监测Channel上read, write或者这两者的空闲状态。当Channel超过了指定的空闲时间时,这个Handler会触发一个IdleStateEvent事件。 在第一次检测到Channel变成active 阅读全文
posted @ 2019-08-14 15:34 自带buff 阅读(775) 评论(1) 推荐(0) 编辑

2019年7月29日

摘要: 本章开始分析ChannelHandler实现代码。ChannelHandler是netty为开发者提供的实现定制业务的主要接口,开发者在使用netty时,最主要的工作就是实现自己的ChannelHandler。ChannelHandler在设计上需要和ChannelPipeline配合共同实现pip 阅读全文
posted @ 2019-07-29 16:00 自带buff 阅读(602) 评论(0) 推荐(0) 编辑

2019年3月28日

摘要: 写数据是NIO Channel实现的另一个比较复杂的功能。每一个channel都有一个outboundBuffer,这是一个输出缓冲区。当调用channel的write方法写数据时,这个数据被一系列ChannelOutboundHandler处理之后,它被放进这个缓冲区中,并没有真正把数据写到soc 阅读全文
posted @ 2019-03-28 15:59 自带buff 阅读(1364) 评论(0) 推荐(0) 编辑

2019年2月27日

摘要: 本章分析Nio Channel的数据读取功能的实现。 Channel读取数据需要Channel和ChannelHandler配合使用,netty设计数据读取功能包括三个要素:Channel, EventLoop和ChannelHandler。Channel有个read方法,这个方法不会直接读取数据, 阅读全文
posted @ 2019-02-27 00:08 自带buff 阅读(1720) 评论(1) 推荐(1) 编辑

2019年1月30日

摘要: Channel提供了3个方法用来实现关闭清理功能:disconnect,close,deregister。本章重点分析这个3个方法的功能的NIO实现。 disconnect实现: 断开连接 disconnect方法的调用栈如下: disconnect稍微复杂一些, 在io.netty.channel 阅读全文
posted @ 2019-01-30 10:56 自带buff 阅读(9662) 评论(1) 推荐(1) 编辑

2019年1月22日

摘要: 创建一个channel实例,并把它register到eventLoopGroup中之后,这个channel然后处于inactive状态,仍然是不可用的。只有在bind或connect方法调用成功之后才能正常。因此bind或connect算是channel初始化的最后一步,本章这就重点分析这两个功能的 阅读全文
posted @ 2019-01-22 15:47 自带buff 阅读(1193) 评论(0) 推荐(0) 编辑

2019年1月15日

摘要: 结构设计 Channel的NIO实现位于io.netty.channel.nio包和io.netty.channel.socket.nio包中,其中io.netty.channel.nio是抽象实现,io.netty.channel.socket.nio最终实现。下面是Channel NIO相关类的 阅读全文
posted @ 2019-01-15 13:45 自带buff 阅读(730) 评论(0) 推荐(0) 编辑

2019年1月8日

摘要: 事件触发、传递、处理是DefaultChannelPipleline实现的另一个核心能力。在前面在章节中粗略地讲过了事件的处理流程,本章将会详细地分析其中的所有关键细节。这些关键点包括: 事件触发接口和对应的ChannelHandler处理方法。 inbound事件的传递。 outbound事件的传 阅读全文
posted @ 2019-01-08 15:45 自带buff 阅读(739) 评论(0) 推荐(0) 编辑

2019年1月2日

摘要: io.netty.channel.DefaultChannelPipeline implements ChannelPipleline DefaultChannelPiple给出了ChannelPipleline的默认实现。ChannelPipleline是一个双向链表,本章的内容是分析默认实现中双 阅读全文
posted @ 2019-01-02 15:46 自带buff 阅读(438) 评论(0) 推荐(0) 编辑

2018年12月24日

摘要: io.netty.channel.ChannelPipeline 设计原理 <!--5f39ae17-8c62-4a45-bc43-b32064c9388a:W3siYmxvY2tJZCI6Ijc0NzAtMTU0NDcxMDI3ODc5NCIsImJsb2NrVHlwZSI6InBhcmFncmF 阅读全文
posted @ 2018-12-24 23:43 自带buff 阅读(792) 评论(0) 推荐(0) 编辑

2018年12月18日

摘要: 把NIO事件转换成对channel unsafe的调用或NioTask的调用 processSelectedKeys()方法是处理NIO事件的入口: private void processSelectedKeys() { if (selectedKeys != null) { processSel 阅读全文
posted @ 2018-12-18 00:07 自带buff 阅读(464) 评论(0) 推荐(0) 编辑

2018年12月11日

摘要: 接口定义 io.netty.channel.EventLoopGroup extends EventExecutorGroup 方法 说明 ChannelFuture register(Channel channel) 把一个channel注册到一个EventLoop ChannelFuture r 阅读全文
posted @ 2018-12-11 00:45 自带buff 阅读(749) 评论(1) 推荐(0) 编辑

2018年12月4日

摘要: 上一章讲了EventExecutorGroup的整体结构和原理,这一章我们来探究一下它的具体实现。 EventExecutorGroup和EventExecutor接口 io.netty.util.concurrent.EventExecutorGroup java.util.concurrent. 阅读全文
posted @ 2018-12-04 00:23 自带buff 阅读(859) 评论(0) 推荐(0) 编辑

2018年11月27日

摘要: 派生体系 java.util.concurrent ThreadPoolExecutor AbstractExecutorService ExecutorService Executor 这个类是Executor框的核心实现,它的名字向我们表明,它是使用thread pool实现的。这个thread 阅读全文
posted @ 2018-11-27 00:06 自带buff 阅读(581) 评论(0) 推荐(0) 编辑

2018年11月20日

摘要: netty线程体系概览 netty的高并发能力很大程度上由它的线程模型决定的,netty定义了两种类型的线程: I/O线程: EventLoop, EventLoopGroup。一个EventLoopGroup包含多个EventLoop, 每个Channel会被注册到一个,一个EventLoop中, 阅读全文
posted @ 2018-11-20 16:51 自带buff 阅读(873) 评论(0) 推荐(0) 编辑

导航