gpt4 book ai didi

java - 如何使用netty中的SimpleChannelPool在连接错误时关闭 channel ?

转载 作者:行者123 更新时间:2023-12-01 17:44:53 26 4
gpt4 key购买 nike

我正在尝试在 netty 中使用连接池,但在编写一些错误处理时遇到问题。我的原始代码如下所示:

ChannelFuture connectFuture = bootstrap.connect(...);
connectFuture.addListener(ChannelFutureListener.CLOSE_ON_FAILURE);

但是,ChannelPool.acquire返回 Future<Channel> 。这意味着在操作失败时,无法访问该 channel ,因此我不知道关闭它的方法。关闭失败的 channel 重要吗?我认为它可能仍然占用一些系统资源,即使它无法连接。

我认为相关代码在netty类中SimpleChannelPoolnotifyConnect :

    private void notifyConnect(ChannelFuture future, Promise<Channel> promise) throws Exception {
if (future.isSuccess()) {
Channel channel = future.channel();
handler.channelAcquired(channel);
if (!promise.trySuccess(channel)) {
// Promise was completed in the meantime (like cancelled), just release the channel again
release(channel);
}
} else {
promise.tryFailure(future.cause());
}
}

在这里我们可以看到返回给调用者的promise失败了,但是 channel 没有传播。

最佳答案

这最终非常简单,您只需要重写 SimpleChannelPool.connectChannel()` 并在其中添加监听器即可。

关于java - 如何使用netty中的SimpleChannelPool在连接错误时关闭 channel ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60880363/

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