2016-06-19 3 views
1

Я хотел бы закрыть серверный сокет на сервере 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(); 
} 

ответ

1

Из netty 4.x user guide кажется, что просто не дожидаясь, пока shutdownGracefully возвратов не будет ждать, пока все розетки закрыты.

Выключение приложения Netty обычно столь же просто, как закрытие вниз все EventLoopGroups созданных с помощью shutdownGracefully(). Он возвращает Будущее, которое уведомляет вас, когда EventLoopGroup было полностью завершено, и все Каналы, принадлежащие к группе, имеют .

Смежные вопросы