当前位置: 首页 > 知识库问答 >
问题:

netty维护连接以及如何通知channelfuture失败

辛星宇
2023-03-14

我正在尝试在客户端中创建一个while循环,该循环试图维护到服务器多个连接。当通道处理程序从服务器得到某些响应(错误)时,它应该关闭该通道并将该通道标记为future Failed。

Channel channel = this.channelPool.acquire().syncUninterruptibly().getNow();
// release channel when closed to unblock creating new channel.
channel.closeFuture().addListener((ChannelFutureListener) future -> {
    // not success wait and retry
    if(!future.isSuccess()){
         trySleep();
    }
    // close normally, no error, release so can create another connection immediately
    this.channelPool.release(future.channel());
});
    null

这个例子是保持一个连接的好方法。但它需要单例,这是我想避免的。谢谢!

共有1个答案

咸昊昊
2023-03-14

只是使用ChannelAttribute传递信息。

ctx.channel().attr(OneAttribute).set(true);
ctx.close();

然后

channel.closeFuture().addListener((ChannelFutureListener) future -> {
// not success wait and retry
if(future.channel().attr(OneAttribute) == some value){
     trySleep();
}
// close normally, no error, release so can create another connection immediately
this.channelPool.release(future.channel());
 类似资料:
  • 我读过《网络指南》,它在ChannelFuture上解释得不多。我发现ChannelFuture在应用时是一个复杂的想法。 我试图做的是在初始响应之后将消息写入上下文。与典型的请求/响应流不同。我需要这样的流程: 客户端发送请求 - 问题是,如果我这样做,第二次写入将不会发出: 然后我尝试使用频道未来,它的工作原理,但我不确定我在逻辑上是否正确: 或者我应该使用ChannelFutureListe

  • 我正在使用Netty 4.0构建一个客户端/服务器。服务器正在正确监听localhost:8083并且我可以远程登录它,它会正确触发服务器断点。但是当我尝试使用这段代码连接时: 它在sync()处抛出异常:java.nio.channels.ClosedChannelException。如前所述,当我telnet 127.0.0.1 8083(或用Socket连接代码)时,它确实有效。知道吗?非常

  • 我正在制作满足以下条件的Netty服务器: null 在我的情况下,既没有发生“通道不活动”事件,也没有发生“连接被对等方重置”异常。 这是我使用的Netty测试客户端代码的部分。 如何在要回复时注意到断开连接?

  • 问题内容: 是否有人可以通过BookSleeve库获取Redis的固定模式? 我的意思是: BookSleeve的作者@MarcGravell 建议不要每次都打开和关闭连接,而是在整个应用程序中保持一个连接。但是如何处理网络中断?也就是说,连接可能首先成功打开,但是当某些代码尝试对Redis进行读/写操作时,连接可能已断开,您必须重新打开它(如果连接无法打开,则正常失败- 但是完全可以满足您的设计

  • 简介: null 问题是,在提交通过长时间运行的任务全程记录后,连接池使用“活动”连接。如果突发足够大,这可能会耗尽我拥有的任何大小的池。 我正在使用具有以下结构的spring boot: 控制器-在“/”处响应,并使“服务”autowired。 服务-包含与数据库交互的所有JPA存储库和@Transactional方法。

  • 客户端通道在服务器入站通道激活方法中初始化。我可以看到pcap已经完成了三次握手(253是本地主机,15是远程主机) 但是当写入客户端通道时,它抛出 java.nio.channels。NotYetConnectedException:io.netty.channel.AbstractChannel$AbstractUnsafe处为null。flush0()(未知源) 根据我的理解,客户端通道应该