Я хотел бы закрыть серверный сокет на сервере Netty, а затем дождаться завершения всех дочерних процессов до выполнения очистки ресурсов.Netty ServerSocket и дети Изящное завершение работы
Шаг 1 Дождитесь сокета сервера Netty, чтобы закрыть на главном потоке с помощью этого кода, где b
является экземпляром ServerBootstrap
b.bind (getPort (p)).sync().channel().closeFuture().sync()
Шаг 2 Проинструктировать сервера сокета, чтобы закрыть из другая резьба, в другом месте в приложении
Этап 3 проинструктировать всех клиентов отключают, я буду иметь код приложения, который будет делать это
Шаг 4 Подождите, пока все клиентские сокеты, чтобы закрыть, это то, что я хочу знать, как сделать. Как я могу получить список всех клиентских сокетов, дочерних элементов сервера и ждать их закрытия?
Нетти версия 4.1.1.Final
Я настроить сервер сокета Нетти, используя следующий фрагмент кода
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();
}