Je voudrais fermer le socket serveur sur un serveur Netty, puis attendre que tous les enfants aient terminé le traitement avant d'exécuter le nettoyage des ressources.Netty ServerSocket et les enfants Graceful Shutdown
Etape 1 Attendre le socket serveur Netty pour fermer sur le fil principal en utilisant ce code où b
est une instance de ServerBootstrap
b.bind (getPort (p)).sync().channel().closeFuture().sync()
Etape 2 charger le socket serveur pour fermer de un fil différent, quelque part dans l'application
Étape 3 Instruire tous les clients à l'arrêt, je vais avoir le code d'application qui le fera
Étape 4 Attendez que tous les sockets client pour fermer, ce que je veux savoir comment faire. Comment puis-je obtenir une liste de toutes les sockets client, enfants du serveur, puis attendre que tous les sockets soient fermés?
Version Netty 4.1.1.Final
je configurer le socket serveur Netty en utilisant le code suivant
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();
}