链式处理每一步都有handler进行监听callback或future
服务端代码addListener
其他模块与下列连接一致
https://blog.csdn.net/weixin_44371237/article/details/122391777?spm=1001.2014.3001.5501
public class Server {
public static void main(String[] args) throws InterruptedException {
//创建两个事件循环组,bossGroup只处理连接请求,workGroup处理客户端业务处理,交给bossGroup
//两个都是无线循环
//默认CPU核*2
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workGroup = new NioEventLoopGroup();
try {
//创建服务端启动对象,配置参数
ServerBootstrap bootstrap = new ServerBootstrap();
//用链式编程进行设置
bootstrap.group(bossGroup, workGroup)//设置两个线程组
.channel(NioServerSocketChannel.class)//使用NioSocketChannel作为服务器通道实现
.option(ChannelOption.SO_BACKLOG, 128)//设置线程队列个数
.childOption(ChannelOption.SO_KEEPALIVE, true)//设置保持活动连接状态
.childHandler(new ChannelInitializer<SocketChannel>() {//创建通道测试对象(匿名对象)
//给pipeline设置处理器
@Override
protected void initChannel(SocketChannel channel) throws Exception {
System.out.println(channel.hashCode());
channel.pipeline().addLast(new ServerHandler());//向管道最后添加处理器
}
});//给workGroup的EventLoop对应的管道设置处理器
System.out.println(LocalDateTime.now() + "服务器准备好了");
//启动服务器,绑定端口,生成ChannelFuture对象
ChannelFuture future = bootstrap.bind(888).sync();
//给ChannelFuture注册监听器,监控关心的事件
future.addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture channelFuture) throws Exception {
if(future.isSuccess()){
System.out.println("监听端口成功");
}else {
System.out.println("监听端口失败");
}
}
});
//对关闭通道进行监听(非阻塞监听,异步模型)
future.channel().closeFuture().sync();
} finally {
bossGroup.shutdownGracefully();
workGroup.shutdownGracefully();
}
}
}