Netty4源码分析——服务器启动
2015-07-28 09:56
465 查看
netty4线程模型
netty4服务器端的启动是由ServerBootstrap引导的,启动代码如下
在创建服务端的时候实例化了2个EventLoopGroup,1个EventLoopGroup实际就是一个EventLoop线程组,负责管理EventLoop的申请和释放。两个EventloopGroup中,一个为BossGroup为Acceptor线程池;另一个为WokerGroup为IO线程池。
服务器的启动是由类ServerBootstrap类引导的,先构建好启动前所需要的各个部件,然后bind()之后调用的顺序如下:
ServerBootstrap类的init()方法首先是给Channel设置options和attrs,然后把User提供的针对NioServerSocketChannel的Handler添加到Pipeline的末尾。接下来复制childOptions和childAttrs,最后实例化一个ChannelInitializer,添加到Pipeline的末尾。init()方法执行完毕之后,AbstractBootstrap的initAndRegister()方法会将NioServerSocketChannel注册到group里。注册前各个类的模型大致如下
在ServerBootstrap.init()的最后有以下代码:
而ChannelInitializer在channelRegistered事件触发后会调用initChannel()方法,随后把自己从Pipeline里删除,此时候EventLoopGroup,channel,handler类关系大致如下:
netty4服务器端的启动是由ServerBootstrap引导的,启动代码如下
public class TimeServer {
public void bind(int port) throws Exception {
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
// 配置服务器的NIO线程租
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.option(ChannelOption.SO_BACKLOG, 1024)
.childHandler(new ChildChannelHandler());
// 绑定端口,同步等待成功
ChannelFuture f = b.bind(port).sync();
// 等待服务端监听端口关闭
f.channel().closeFuture().sync();
} finally {
// 优雅退出,释放线程池资源
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
在创建服务端的时候实例化了2个EventLoopGroup,1个EventLoopGroup实际就是一个EventLoop线程组,负责管理EventLoop的申请和释放。两个EventloopGroup中,一个为BossGroup为Acceptor线程池;另一个为WokerGroup为IO线程池。
服务器的启动是由类ServerBootstrap类引导的,先构建好启动前所需要的各个部件,然后bind()之后调用的顺序如下:
ServerBootstrap类的init()方法首先是给Channel设置options和attrs,然后把User提供的针对NioServerSocketChannel的Handler添加到Pipeline的末尾。接下来复制childOptions和childAttrs,最后实例化一个ChannelInitializer,添加到Pipeline的末尾。init()方法执行完毕之后,AbstractBootstrap的initAndRegister()方法会将NioServerSocketChannel注册到group里。注册前各个类的模型大致如下
在ServerBootstrap.init()的最后有以下代码:
而ChannelInitializer在channelRegistered事件触发后会调用initChannel()方法,随后把自己从Pipeline里删除,此时候EventLoopGroup,channel,handler类关系大致如下:
相关文章推荐
- qss样式
- hdu4738Caocao's Bridges tarjan求无向图的桥
- 带你入门带你飞Ⅱ 使用Mocha + Chai + SuperTest测试Restful API in node.js
- python比较两个列表是否相等的方法
- ie hack
- 前向分步算法(forward stagewise algorithm)
- 7-27validation验证和防止取消按钮的出错的bug修改
- [LeetCode]Add Two Numbers
- adb 常用命令使用+adb 无线调试
- 【暑期基础2】B HDU 统计元音
- 1985(POJ)
- Web Service测试工具小汇
- odoo documentation
- 在编码时如何使用\r与\n,两者的区别
- simpleAdapter和 ListView的item的定义
- Spring MVC+Mybatis+Maven+Velocity+Mysql
- UVA 514 Rails(栈)
- 字符串训练------UVA 409题目 Excuses, Excuses!
- Android系统下载管理DownloadManager功能介绍及使用示例
- VS2013 编译程序时报无法加载PDB文件错误解决方案