Java 修改Netty服务器引导通道初始值设定项
我有一个配置了相当标准的Http编解码器通道初始化器的ServerBootstrap 关机时,我的服务器会等待一段宽限期,在此期间它仍然可以处理传入的请求。我的服务器支持保持活动状态,但在关机时,我希望确保发送的每个HttpResponse都使用HTTP头“connection:close”关闭连接,并且在写入之后关闭通道。这仅在服务器关闭时才有必要 我有一个ChannelHandler来支持这一点:Java 修改Netty服务器引导通道初始值设定项,java,netty,Java,Netty,我有一个配置了相当标准的Http编解码器通道初始化器的ServerBootstrap 关机时,我的服务器会等待一段宽限期,在此期间它仍然可以处理传入的请求。我的服务器支持保持活动状态,但在关机时,我希望确保发送的每个HttpResponse都使用HTTP头“connection:close”关闭连接,并且在写入之后关闭通道。这仅在服务器关闭时才有必要 我有一个ChannelHandler来支持这一点: @ChannelHandler.Sharable public class CloseConn
@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);
}
我使用一个ChannelGroup跟踪所有连接的客户端,因此我可以在关机时动态修改每个客户端的管道,以包括我的CloseConnectionHandler,这没有问题
但是,宽限期内的新连接的管道配置由原始ServerBootstrap ChannelInitializer提供,我看不到动态重新配置的方法
作为一种解决方法,我可以在标准管道中配置CloseConnectionHandler,并使用布尔值关闭它,仅在关闭时激活它。但如果可能的话,我宁愿避免这样做,因为这似乎有点不必要。目前没有办法在运行时“替换”初始值设定项。因此,使用旗帜等将是最好的选择。Ta Norman。作为扩展,Netty会从中受益吗?如果合适的话,我很乐意去做。