NioEventLoopGroup bossGroup = new NioEventLoopGroup(1);
NioEventLoopGroup workGroup = new NioEventLoopGroup(8);
try{
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(bossGroup, workGroup)
.handler(new LoggingHandler())
.channel(NioServerSocketChannel.class)
.option(ChannelOption.SO_BACKLOG, 128)
.childHandler(new ChannelInitializer<Channel>() {
@Override
protected void initChannel(Channel ch) throws Exception {
// 这里添加自己的业务处理Handler
ch.pipeline().addLast(new TestHandler());
}
});
ChannelFuture f = serverBootstrap.bind(8080).sync();
f.channel().closeFuture().sync();
}catch(Exception e){
}finally{
bossGroup.shutdownGracefully();
workGroup.shutdownGracefully();
}
上面实例Demo可以拆分为几个步骤:
1、创建2个NioEventLoopGroup,分别为bossGroup和workGroup
- bossGroup:主要负责接受客户端SocketChannel的连接
- workGroup:主要负责处理客户端SocketChannel的读写操作
2、创建ServerBoostrap配置引导器,进行一些简单的配置
- group(),加入上面两个创建的NioEventLoopGroup
- handler(),指定Handler
- channel(),指定服务端使用NioServerSocketChannel这个对象
- option(),配置TCP参数
- childHandler(),指定处理客户端业务逻辑的Handler(读、写等等)
3、调用bind(),绑定端口
4、调用closeFuture().sync(),让主线程进行等待,直到服务端channel shutDown在往下执行
5、调用NioEventLoop.shutdownGracefully()进行优雅关闭。