【问题标题】:Flexible timeout mechanism in JBoss Netty?JBoss Netty 中的灵活超时机制?
【发布时间】:2011-07-04 10:56:55
【问题描述】:

我正在考虑将我的 Java NIO 实现转移到 JBoss Netty,因为它提供的模型比我实现的更简洁。该实现使用专有协议通过 TCP 管理许多客户端到组件的连接。

我在 Netty 中看不到的实现的一个方面是能够设置任意超时,其中:

  1. 等待从组件中读取一些数据。我知道 Netty 有一个 ReadTimeoutHandler,但是当组件在状态机中移动时,它可以轻松地更改/关闭超时值吗?
  2. 等待时间过去,以便我可以重新连接到组件(让组件在断开连接后有时间重新启动)。这与通信完全无关,只是一个简单的超时,但是我希望以与其他与通信相关的超时相同的方式将超时“事件/异常”呈现给处理程序类。

这个超时机制可以用Netty来实现吗?

结论:鉴于我需要实现一个超时机制,该机制将在它自己的线程中运行,我毕竟不会转换为使用 Netty。

【问题讨论】:

  • 你正在实现什么样的通道,服务器还是客户端?
  • 你的意思是“handle”,而不是“handler”...
  • @someguy:不,我使用 Handler 一词来表示“代表”我正在与之通信的组件的类。 @secmask:它们是与多个组件的客户端连接。
  • 是的,它通常被称为“手柄”。另一方面,“处理程序”是“处理程序中接收到的输入的异步回调子例程”(维基百科)。
  • @someguy:句柄是资源标识符,但不是那样。我是在一般意义上使用它,所以不用担心。

标签: java nio netty


【解决方案1】:

ChannelConfig。方法setConnectTimeoutMillis(int) 以毫秒为单位设置超时。您可以通过调用setOption(String, Object) 来通过Bootstrap 实例调用此方法。 name 将是“connectTimeoutMillis”,value 将是所需的超时时间(以毫秒为单位)。

以下 sn-p 显示如何将连接超时设置为 5000 毫秒(5 秒)。

ClientBootstrap bootstrap... // bootstrap instance
bootstrap.setOption("connectTimeoutMillis", 5000);

【讨论】:

  • 非常感谢 - 但是(我想我在这里并不清楚) - 我使用超时值来限制重新连接。场景是连接断开,我想在连接之前给组件一个重新启动的机会。你描述的方法能满足那个条件吗?
  • @trojanfoe 在这种情况下,据我所知,您必须自己实现类似的东西。至于新问题的第一部分,我认为您将不得不使用不同的ReadTimeoutHandler。我想每个“状态”都有不同的实例。
  • 好的,有道理,谢谢。是的,每个状态的超时值都会发生变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-04
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 2012-02-14
  • 1970-01-01
相关资源
最近更新 更多