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 回答