Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 修改Netty服务器引导通道初始值设定项_Java_Netty - Fatal编程技术网

Java 修改Netty服务器引导通道初始值设定项

Java 修改Netty服务器引导通道初始值设定项,java,netty,Java,Netty,我有一个配置了相当标准的Http编解码器通道初始化器的ServerBootstrap 关机时,我的服务器会等待一段宽限期,在此期间它仍然可以处理传入的请求。我的服务器支持保持活动状态,但在关机时,我希望确保发送的每个HttpResponse都使用HTTP头“connection:close”关闭连接,并且在写入之后关闭通道。这仅在服务器关闭时才有必要 我有一个ChannelHandler来支持这一点: @ChannelHandler.Sharable public class CloseConn

我有一个配置了相当标准的Http编解码器通道初始化器的ServerBootstrap

关机时,我的服务器会等待一段宽限期,在此期间它仍然可以处理传入的请求。我的服务器支持保持活动状态,但在关机时,我希望确保发送的每个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);
}
我使用一个ChannelGroup跟踪所有连接的客户端,因此我可以在关机时动态修改每个客户端的管道,以包括我的CloseConnectionHandler,这没有问题

但是,宽限期内的新连接的管道配置由原始ServerBootstrap ChannelInitializer提供,我看不到动态重新配置的方法


作为一种解决方法,我可以在标准管道中配置CloseConnectionHandler,并使用布尔值关闭它,仅在关闭时激活它。但如果可能的话,我宁愿避免这样做,因为这似乎有点不必要。

目前没有办法在运行时“替换”初始值设定项。因此,使用旗帜等将是最好的选择。

Ta Norman。作为扩展,Netty会从中受益吗?如果合适的话,我很乐意去做。