【发布时间】:2018-03-08 05:42:38
【问题描述】:
我在我的应用程序中添加了一个限制功能,当传入的请求率超过阈值时,它需要在 SSL 握手之前关闭一个通道以减少 CPU 使用率。现在我使用带有服务器模式的 Netty SslHandler 进行握手。我目前的实现是在SslHandler 之前添加ChannelInboundHandlerAdapter 并重写channelActive 方法:
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
if (!limiter.tryAcquire()) {
ctx.close();
return;
}
ctx.pipeline().remove(this);
ctx.fireChannelActive();
}
通过这种方式,通道可以在变为活动状态时关闭。但是,我会收到握手失败的SslHandshakeCompletionEvent。我阅读了 Netty SslHandler 的源代码。当 channelInactive 事件被触发时,它将在channelInactive 方法中设置握手失败。所以我想知道是否有更好的方法来关闭通道而不触发握手失败事件,因为当我限制关闭通道时握手过程还没有开始。
【问题讨论】: