【问题标题】:Netty ServerSocket and Children Graceful ShutdownNetty ServerSocket 和子进程优雅关闭
【发布时间】:2016-10-20 13:08:32
【问题描述】:

我想关闭 Netty 服务器上的服务器套接字,然后等待所有子进程完成处理,然后再执行资源清理。

第 1 步 使用此代码等待 Netty 服务器套接字在主线程上关闭,其中 bServerBootstrap 的一个实例

b.bind ( getPort ( p ) ).sync ().channel ().closeFuture ().sync ()

第 2 步 指示服务器套接字从另一个线程关闭,在应用程序的其他地方

第 3 步 指示所有客户端关闭,我将拥有执行此操作的应用程序代码

第 4 步 等待所有客户端套接字关闭,这就是我想知道的操作。如何获取所有客户端套接字、服务器子级的列表,然后等待它们全部关闭?

Netty版本4.1.1.Final

我使用以下代码 sn-p 设置 Netty 服务器套接字

EventLoopGroup bossGroup = new NioEventLoopGroup ( 1 );
EventLoopGroup workerGroup = new NioEventLoopGroup ( Math.max ( 1, Runtime.getRuntime ().availableProcessors () / 2 ) );
try
{
  ServerBootstrap b = new ServerBootstrap ();
  b.group ( bossGroup, workerGroup )
  .channel ( NioServerSocketChannel.class )
  .childHandler ( new ServerInitializer ( sslctx, jsonIOManager, dispatcherPool, factory ) )
  .childOption ( ChannelOption.TCP_NODELAY, Boolean.TRUE )
  .childOption ( ChannelOption.SO_KEEPALIVE, Boolean.TRUE );

  // wait till server socket is closed    
  b.bind ( getPort ( p ) ).sync ().channel ().closeFuture ().sync ();
  // instruct all clients to shutdown
  dispatcherPool.shutdown ();

  // wait on all sockets that are children of the server socket to close
  // How can i do this?

}
finally
{
  bossGroup.shutdownGracefully ();
  workerGroup.shutdownGracefully ();
}

【问题讨论】:

    标签: java server netty application-shutdown


    【解决方案1】:

    netty 4.x user guide 看来,只需等待shutdownGracefully 返回就会等到所有套接字都关闭。

    关闭 Netty 应用程序通常就像关闭一样简单 关闭您通过 shutdownGracefully() 创建的所有 EventLoopGroup。它 返回一个 Future 通知您 EventLoopGroup 何时 完全终止,属于该组的所有频道都已 已关闭。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 1970-01-01
      • 2010-11-13
      • 2016-09-21
      • 2013-01-04
      • 1970-01-01
      相关资源
      最近更新 更多