- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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/
我有一个 ServerBootstrap,配置了相当标准的 Http-Codec ChannelInitializer。 关闭时,我的服务器会等待一段宽限期,在此期间它仍然可以处理传入请求。我的服务器
与直接使用 ChannelHandler 链相比,使用 ChannelInitializer 有什么优势? 例如,我可以使用服务器 Bootstrap : bootstrap.childHandler
我有一个 NettyServerCustomizer,下一个代码: @Override public HttpServer apply(final HttpServer httpServer)
我是一名优秀的程序员,十分优秀!