2012-06-08 39 views
2

我的問題似乎是相關的:我試圖阻止我的Netty服務器 https://issues.jboss.org/browse/NETTY-433服務器引導releaseExternalResources卡在環

但此調用不會返回:

serverBootstrap.releaseExternalResources(); 

它的循環永遠在試圖關閉時ExecutorUtil.terminate方法工人的ThreadPoolExecutor:

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

問題是我沒有任何控制OV呃客戶端連接到我的服務器。有沒有辦法讓服務器強制停止服務器並簡單地關閉通道並停止工作線程?

+0

你確定你沒有試圖使用工作線程停止服務器? – Nicholas

+0

是正常停止。相信這是因爲一個客戶端仍然有一個對我的服務器開放的渠道,所以我不能釋放資源?任何方式在這個? – DarVar

回答

2

在做釋放之前,您可以做些什麼來確保您的子頻道已關閉所有資源將在ChannelGroup中註冊所有創建的子頻道。當您關機時,您可以撥打ChannelGroup上的close(),這將關閉所有頻道。

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()); 
    } 
} 

換句話說,你也必須覆蓋在你的處理器的方法。