2

私の問題は次のことに関連しているようです: https ://issues.jboss.org/browse/NETTY-433

Nettyサーバーを停止しようとしていますが、この呼び出しが返されません。

serverBootstrap.releaseExternalResources();

ワーカーThreadPoolExecutorをシャットダウンしようとすると、ExecutorUtil.terminateメソッドで永久にループします。

org.jboss.netty.util.internal.ExecutorUtil.terminate()
   for (;;) {
       es.shutdownNow(); 
       es.awaitTermination..
   }

問題は、サーバーに接続しているクライアントを制御できないことです。サーバーがサーバーを強制的に停止し、チャネルを単純に閉じてワーカースレッドを停止する方法はありますか?

4

2 に答える 2

2

releaseAllResourcesを実行する前に子チャネルが閉じていることを確認するためにできることは、作成されたすべての子チャネルをChannelGroupに登録することです。シャットダウンするときは、ChannelGroupでclose()を呼び出すことができます。これにより、その中のすべてのチャネルが閉じられます。

于 2012-06-08T18:10:46.590 に答える
0

Netty APIによると、私が個人的に見逃した重要な部分は次のとおりです。

 public class MyHandler extends SimpleChannelUpstreamHandler {
     @Override
     public void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e) {
         // Add all open channels to the global group so that they are
         // closed on shutdown.
         allChannels.add(e.getChannel());
     }
 }

つまり、ハンドラーのメソッドもオーバーライドする必要があります。

于 2012-11-18T01:05:08.333 に答える