netty 代码分析部分

天王盖地虎626 发布于 2014/06/27 02:12
阅读 638
收藏 0

      public void run() throws Exception { 

     EventLoopGroup bossGroup = new NioEventLoopGroup();
     //bossGroup线程池用来接受客户端的连接请求 

     EventLoopGroup workerGroup = new NioEventLoopGroup();
     //workerGroup线程池用来处理boss线程池里面的连接的数据 

     try { 

         ServerBootstrap b = new ServerBootstrap(); 

         b.group(bossGroup, workerGroup) 

          .channel(NioServerSocketChannel.class) 

          .childHandler(new TelnetServerInitializer());
          //ChannelInitializer是一个特殊的handler,用来初始化ChannelPipeline里面的handler链。
          //这个特殊的ChannelInitializer在加入到pipeline后,在initChannel调用结束后,自身会被remove掉,从而完成初始化的效果(后文会详述)。  
      //AbstractBootstrap.option()用来设置ServerSocket的参数,AbstractBootstrap.childOption()用来设置Socket的参数。 
         b.bind(port).sync().channel().closeFuture().sync(); 

     } finally { 

         bossGroup.shutdownGracefully(); 

         workerGroup.shutdownGracefully(); 

     } 

 } 

这标红部分的代码,感觉是停掉 bossGroup,workerGroup

我在想,代码在finally中,肯定会执行这个代码,如果执行了,其目的是干啥的?

停掉后,岂不是影响和客户端交互吗?

加载中
1
JerryLin
JerryLin
channel被主动close或异常发生时被动close时,.closeFuture().sync()就会触发返回了,然后可以执行到shutdownGracefully
0
JerryLin
JerryLin

         b.bind(port).sync().channel().closeFuture().sync();


一直阻塞在这里运行没看到吗?

0
天王盖地虎626
天王盖地虎626

我在测试的时候,客户端连接后进行交互后,发现就执行

childHandler(new TelnetServerInitializer());

这里面的代码,我想问下

bossGroup.shutdownGracefully(); 

 workerGroup.shutdownGracefully(); 

这两行代码什么时候执行呢?

 

0
天王盖地虎626
天王盖地虎626

引用来自“JerryLin”的评论

channel被主动close或异常发生时被动close时,.closeFuture().sync()就会触发返回了,然后可以执行到shutdownGracefully

channel被主动close

一般在什么情景下发生呀?

b.bind(port).sync().channel().close();

是不是就是所谓的主动close?

返回顶部
顶部