【发布时间】:2016-10-20 13:08:32
【问题描述】:
我想关闭 Netty 服务器上的服务器套接字,然后等待所有子进程完成处理,然后再执行资源清理。
第 1 步
使用此代码等待 Netty 服务器套接字在主线程上关闭,其中 b 是 ServerBootstrap 的一个实例
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