Netty源码分析3:创建一个简单的Netty服务并测试
创建并启动一个Netty服务端
如何创建并启动一个Netty服务端?通过如下的代码将启动一个netty服务端并监听在8888端口。
public class MyNettyServer {
private static Logger logger = LogManager.getLogger(MyNettyServer.class);
public static void main(String[] args) throws InterruptedException {
NioEventLoopGroup boss = new NioEventLoopGroup(1);
NioEventLoopGroup worker = new NioEventLoopGroup();
try {
new ServerBootstrap()
.group(boss, worker)//该方法返回ServerBootstrap
.option(ChannelOption.SO_BACKLOG, 128)//该方法返回ServerBootstrap
.channel(NioServerSocketChannel.class)//该方法返回ServerBootstrap
.handler(new MyServerChannelDuplexHandler())//该方法返回ServerBootstrap
.childHandler(new MyChannelInitializer("客户端"))//该方法返回ServerBootstrap
.bind(8888)//返回ChannelFuture
.sync()//返回ChannelFuture
.addListener(future -> logger.info("服务启动成功:" + future.isSuccess()))//返回ChannelFuture
.channel()//返回Channel
.closeFuture()//返回ChannelFuture
.sync()//返回ChannelFuture
.addListener(future -> logger.info("端口已关闭,如有异常,则异常原因为:"+future.cause()));//返回ChannelFuture
} finally {
//优雅的关闭boss和worker
boss.shutdownGracefully();
worker.shutdownGracefully();
}
}
}
- NioEventLoopGroup boss:相当于循环监听端口操作,当有客户端发起连接时会得到一个与客户端对应的socket操作用于对端双方通信
- NioEventLoopGroup worker:上述boss在创建好与客户端的对应的socket后会将socket交给worker,由worker来执行具体的通信操作
- NioEventLoopGroup:异步事件循环执行器组,内部定义了一组异步事件执行器NioEventLoop,暂时可以简单的理解为线程池与线程的关系,后续会进行专门分析
- ServerBootstrap:服务启动引导类,通过该类可以快速的构建一个Netty应用,同时该类提供了一个链式编程
- group():配置boss和worker,简单的让当前ServerBootstrap持有boss和work。
- option(ChannelOption.SO_BACKLOG, 1