2013-09-25 48 views
1

我有一個ServerBootstrap配置了一個相當標準的Http Codec ChannelInitializer。修改Netty ServerBootstrap ChannelInitializer

在關機我的服務器等待一個寬限期,它仍然可以處理傳入的請求。我的服務器支持保持活動狀態,但是在關閉時,我想確保每個發送的HttpResponse都關閉與HTTP頭「Connection:close」的連接,並且在寫入後關閉通道。這隻在服務器關閉時需要。

我有一個的ChannelHandler來支持:

@ChannelHandler.Sharable 
public class CloseConnectionHandler extends ChannelOutboundHandlerAdapter { 

@Override 
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { 
    HttpResponse response = (HttpResponse) msg; 

    if (isKeepAlive(response)) { 
     setKeepAlive(response, false); 
     promise.addListener(ChannelFutureListener.CLOSE); 
    } 
    ctx.write(msg, promise); 
} 

我一直使用通道組的所有連接的客戶端的軌道,這樣我就可以動態修改每個客戶端的管道在關機時的點,包括我CloseConnectionHandler ,這工作沒有問題。

然而,在寬限期內新的連接有自己的管道配置由原始ServerBootstrap ChannelInitializer提供,並且我看不到的動態重新配置,一個方法是什麼?

作爲一種變通我可以在標準配置的管道和一個布爾關閉,只有激活它關閉CloseConnectionHandler。但我寧願避免,如果可能的話,似乎有點不必要。

回答

2

目前還沒有辦法「替換」在運行時的初始化。所以使用國旗等是最好的選擇。

+0

塔諾曼。 Netty會因此而受益嗎?如果合適的話,我很樂意處理它。 –