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

netty:为每个通道配置通道读取超时

越嘉石
2023-03-14

我正在使用Netty框架并实现客户端和服务器。我建立了多达1000个连接。我想在多个地方配置超时值。其中一些我能理解。下面是我的netty实现的netty行为:
1。许多异步连接都是从具有超时的客户端开始的(使用ChannelOption.CONNECT\u timeout\u MILLIS配置)
2。那些能够连接的客户端连接使用channelActive发送HTTP请求,并使用channelRead0接收响应。

问题-我想在发送请求和接收特定通道的数据之间设置超时值
我阅读了netty文档,提出了两个解决方案:
1。https://netty.io/4.0/api/io/netty/channel/ChannelConfig.html#setConnectTimeoutMillis-int-
2。https://netty.io/4.0/api/io/netty/handler/timeout/ReadTimeoutHandler.html

我不知道该选择哪个选项,哪个更好,或者还有其他选项。

共有1个答案

缪坚诚
2023-03-14

您需要设置多个限制(最有可能)。正如您已经发现的,您可能希望通过setConnectTimeoutMillis设置连接超时,但也有一个ChannelDuplexHandler,它将确保您在预期时间内收到对请求的响应。您可能还想看看IdleStateHandler,如果Channel空闲时间过长,它将允许通过ChannelPipeline触发事件。

 类似资料:
  • 嗨,当IdleStateHandler被添加到管道时,我遇到了一个问题。当我使用 我建议每个通道在30秒内没有任何活动(读或写)时触发IdleState事件。但此设置适用于定义IdleStateHandler的管道所处理的每个通道。问题是我如何为每个频道设置不同的空闲时间?

  • 我想创建一个可以重用通道的连接池,但我想不通 执行此测试 我在第二个频道遇到了ClosedChannel异常。写入(请求)。。。。 存在重用通道的方法吗?还是保持通道打开? 提前感谢

  • 我有一个服务器和一个客户端,它们有自己的引导程序。我的问题是,不同的连接用于不同的目的。一个用于控制通道(与服务器通信并返回),然后建立其他连接以进行数据传输。我以编程方式将idlestate处理程序仅添加到需要它的连接管道中,但在调试之后,我发现无论连接如何,通道总是相同的。因此,我的数据传输正在影响生存。我通过向netty IdleStateHandler添加调试并输出通道id看到了这一点。很

  • 我正在使用netty开发一个代理服务器,我的代理ProxyBackendHandler类如下所示。在channelRead方法中,我需要获取msg数据,并将其作为TextWebSocketFrame写入客户端。为此,我使用了StringBuilder和while循环来迭代ByteBuf。有没有人能给我一个更好的方法来做这件事,因为上面的代码在高数据负载时有很高的性能开销。

  • 文件上说 请注意,此处理程序的管道覆盖范围为“全部”,这意味着必须仅创建一个此类处理程序并在所有通道之间共享,因为计数器必须在所有通道之间共享。 我理解必须共享此处理程序。 假设我有两组通道。我可以为每个组使用不同的GlobalChannelTrafficShapingHandler实例吗?

  • 我的I/O流如下: < li >客户端向通道发送数据# 1 < li >服务器(处理程序)根据客户端数据从数据库接收数据,并将其发送给客户端 < li >客户端向通道发送数据# 2 < li >服务器(处理程序)根据客户端数据再次从数据库接收数据,并将其发送回客户端,然后关闭通道 如果首次在通道中读取花费的时间太长,则读取超时处理程序将按预期触发异常。但是,如果第一次读取没问题(= 足够快),并且