gpt4 book ai didi

java - 修改Netty ServerBootstrap ChannelInitializer

转载 作者:行者123 更新时间:2023-11-30 04:13:33 28 4
gpt4 key购买 nike

我有一个 ServerBootstrap,配置了相当标准的 Http-Codec ChannelInitializer。

关闭时,我的服务器会等待一段宽限期,在此期间它仍然可以处理传入请求。我的服务器支持保持 Activity 状态,但在关闭时我想确保发送的每个 HttpResponse 都会关闭带有 HTTP header “Connection: close”的连接,并且 channel 在写入后关闭。仅当服务器关闭时才需要这样做。

我有一个 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 并使用 boolean 值关闭,仅在关闭时激活它。但如果可能的话,我宁愿避免这样做,似乎有点不必要。

最佳答案

目前无法在运行时“替换”初始化程序。因此,使用标志等将是最好的选择。

关于java - 修改Netty ServerBootstrap ChannelInitializer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18995136/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com