Future-Listener机制

 Future-Listener机制

其逻辑和AJAX一样,通过监听事件来回调方法

代码逻辑:

serverBootstrap.bind(port).addListener(future->{

if(future.isSuccess()){

system.out.println(newDate()+":port:"+port+"绑定成功");

}else{

System.err.println(newDate()+"port"+port+"绑定失败")

}

})

相比同步IO,异步IO可以避免线程阻塞,高并发情况下会有更稳定和更高的吞吐量

 如下是 nettyserver 完整代码示例

public class NettyServer {
    public static void main(String[] args) {
        EventLoopGroup bossGroup = new NioEventLoopGroup();
        EventLoopGroup workerGroup = new NioEventLoopGroup();
//      创建服务器端的启动对象,配置参数
        ServerBootstrap bootstrap = new ServerBootstrap();
//      使用链式编程来进行设置
        bootstrap.group(bossGroup,workerGroup) //设置两个线程池组
                .channel(NioServerSocketChannel.class) //NioServerSocketChannel 作为服务器的通道实现
                .option(ChannelOption.SO_BACKLOG,128) //设置线程队列得到连接个数
                .childOption(ChannelOption.SO_KEEPALIVE,true) //设置保活连接状态
                .childHandler(new ChannelInitializer<SocketChannel>() {
                    @Override
                    protected void initChannel(SocketChannel ch) throws Exception {
                        ch.pipeline().addLast(new NettyServerHandler());
                    }
                }) ;//给workerGroup的EventLoop对应的管道设置处理器
        System.out.println("...服务器 isready ...");
//        绑定一个端口并且同步,生成一个channelfuture 对象
//        启动服务器(绑定端口)
        try {
            ChannelFuture cf = bootstrap.bind(6668).sync();
// 异步开始监听
            cf.addListener(new ChannelFutureListener() {
                @Override
/**
 * isDone() 判断当前操作是否完成
 * isSuccess() 判断已经完成的当前操作是否成功
 * getCause() 判断已经完成的当前操作失败原因
 * isCancelled() 判断已经完成的当前操作是否被取消
 * addListener() 注册监听器,当操作已经完成(isDone 返回成功),将会通知指定监听器,如果Future已经完成,则通知指定的监听器
 * */             
                public void operationComplete(ChannelFuture channelFuture) throws Exception {
                    if(cf.isSuccess()){
                        System.out.println("监听端口 6668 成功");
                    }else {
                        System.out.println("监听端口 6668 失败");
                    }
                }
            });
//            对关闭通道进行监听
//            cf.channel().closeFuture().sync();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值