一.Nio相关
- BIO与NIO、AIO的区别(这个容易理解) 这篇文章很清楚的描述几种IO的区别,也很清楚说明了异步,同步,堵塞,非堵塞的基本概念
 - Scalable IO in Java》学习笔记
 
二.Netty源码相关
一个netty的服务端的例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static void main(String[] args) throws InterruptedException {
  EventLoopGroup bossGroup = new NioEventLoopGroup();
  EventLoopGroup wordGroup = new NioEventLoopGroup();
  try {
    ServerBootstrap serverBootstrap = new ServerBootstrap();
    serverBootstrap.group(bossGroup, wordGroup).channel(NioServerSocketChannel.class)
      .childHandler(new ChannelInitializer<SocketChannel>() {
        @Override
        protected void initChannel(SocketChannel ch) throws Exception {
          ChannelPipeline pipeline = ch.pipeline();
          ...
        }
      });
    ChannelFuture channelFuture = serverBootstrap.bind(8899).sync();
    channelFuture.channel().closeFuture().sync();
  } finally {
    bossGroup.shutdownGracefully();
    wordGroup.shutdownGracefully();
  }
}
无论写简单的还是复杂的netty程序,服务端程序都有以下三个步骤:
- 定义两个事件循环组,一般来说是NioEventLoopGroup。
 - 然后使用Netty定义好的服务启动器ServerBootStrap。
 - 最后在childHandler中定义ChannelInitializer这个类,这个类里面定义的跟我们请求流程有关的handler。
 
Netty开发基本就是这个模板套路,后面的对源码的理解和分析也是基于这个demo的,会有一些扩展的解读文章会在后续补上。
一.基本构造方法
二.服务端启动
三.EventLoop
- 【3-1.Netty源码:NioEventLoop启动】
 - 【3-2.Netty源码:NioEventLoop循环检测事件】
 - 【3-3.Netty源码:NioEventLoop处理事件】
 - 【3-4.Netty源码:任务和定时任务队列】
 
四.新连接接入
- 【4-1.Netty源码:新连接检测】
 - 【4-2.Netty源码:NioSocketChannel的线程分配和selector注册】
 - 【4-3.Netty源码:NioSocketChannel读事件注册】
 
五.ChannelPipeline
- 【5-1.Netty源码:Pipeline初始化】
 - 【5-2.Netty源码:新增用户自定义ChannelHandler】
 - 【5-3.Netty源码:InBound事件传播】
 - 【5-4.Netty源码:OutBound事件传播】