标准的Netty服务端代码格式如下
ServerBootstrap bootstrap = new ServerBootstrap();
///创建2个线程池,boss用于接待新来的请求,worker用于处理请求
NioEventLoopGroup boss = new NioEventLoopGroup();
NioEventLoopGroup worker = new NioEventLoopGroup();
try{
设置线程池
bootstrap.group(boss, worker);
设置channel工厂,之后会通过反射newChannel拿到这个channel的实例
bootstrap.channel(NioServerSocketChannel.class);
bootstrap.childHandler(
new DefaultInit()
);
ChannelFuture future = bootstrap.bind(8080).sync();
future.addListener(new GenericFutureListener<Future<? super Void>>() {
@Override
public void operationComplete(Future<? super Void> future) throws Exception {
System.out.println("----------------------------\n" +
"----- 服务器连接成功 -----\n" +
"------ Hello Netty -----\n" +
"----------------------------");
}
});
}catch (Exception e) {
e.printStackTrace();
boss.shutdownGracefully();
worker.shutdownGracefully();
}
finally {
}
在这个过程中出现了以下对象:
- ServerBootstrap
这是一个帮助启动的类
- NioEventLoopGroup
这是一个线程组的对象,里面存放NioEventLoop(这是一个单线程池),Netty的所有任务都会交给这个线程组里的线程去执行
- ChannelFuture
这是一个继承自原生JDK Future的接口,与原生不同的是,他提供一个channel()方法来获取到当前的channel
- GenericFutureListener
这是一个监听器,当任务完成时,会调用setSuccess防范,然后执行监听器中的方法。采用的是观察者模式