一.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事件传播】