【问题标题】:Modify Netty ServerBootstrap ChannelInitializer修改 Netty ServerBootstrap ChannelInitializer
【发布时间】:2013-09-30 11:13:21
【问题描述】:

我有一个配置了相当标准的 Http-Codec ChannelInitializer 的 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 并使用布尔值关闭,仅在关闭时激活它。但如果可能的话我宁愿避免,似乎有点不必要。

【问题讨论】:

    标签: java netty


    【解决方案1】:

    目前没有办法在运行时“替换”初始化程序。所以使用旗帜等是最好的选择。

    【讨论】:

    • 塔诺曼。作为扩展,Netty 会从中受益吗?如果合适的话,我很乐意继续努力。
    猜你喜欢
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 2019-10-06
    • 2017-05-18
    • 2021-12-12
    • 2021-03-08
    相关资源
    最近更新 更多