之前在工作中应用过netty,现在有一次用到,彻底的总结一下源码,加深理解。
Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.
这是Netty官网介绍的Netty框架,netty框架的优势这里不过多介绍,用过netty的自然知道,本系列针对对netty有个应用经验的开发人员
学习netty框架源码,需要几个前提
- Java基础
- Socket网络编程经验,最好明白nio原理
- 多线程基础
- 常用设计模式
由于netty框架系统庞大,不可能直接从头到尾梳理,为了更好的学习和理解,我将netty拆分成了几个子流程。Netty系统设计的代码紧凑,重用性高,因此代码有些地方不太容易理解,即使拆分成几个子流程,流程之间的前后关联因为是非常紧密的。遇到不太明白的地方可以暂时跳过,重要把握主体脉络,最终融会贯通。
我会从一个简单的服务器端代码,开始介绍。代码如下
1 public class NettyServer { 2 3 public static void main(String[] args) { 4 5 EventLoopGroup boss = new NioEventLoopGroup(1); 6 EventLoopGroup worker = new NioEventLoopGroup(); 7 8 try { 9 ServerBootstrap serverBootstrap = new ServerBootstrap() 10 .group(boss, worker) 11 .channel(NioServerSocketChannel.class) 12 .childHandler(new ChannelInitializer<SocketChannel>() { 13 14 @Override 15 protected void initChannel(SocketChannel ch) throws Exception { 16 ch.pipeline().addLast(new ServerHandler()); 17 } 18 }); 19 20 21 ChannelFuture channelFuture = serverBootstrap.bind(6666).sync(); 22 channelFuture.channel().closeFuture().sync(); 23 24 } catch (Exception e) { 25 // TODO Auto-generated catch block 26 e.printStackTrace(); 27 } finally { 28 boss.shutdownGracefully(); 29 worker.shutdownGracefully(); 30 } 31 32 } 33 }
不废话了,开始啃。
具体子流程包括:
- EventLoopGroup建立
- Channel的初始化
- Channel的注册
- NIoEvnentLoop接受客户端连接
- ChannelPipline,ChannelHandler和ChannelHandlerContext的关系
- 待续...
后面详细讲解每一个子流程。