netty client + keep-alive=true



我对如何处理netty(3.6.2.FINAL)中的大量连接和keep alive=true感到困惑。

对于在作为服务器端连接器的netty客户端上工作,对另一个服务进行http调用,它希望始终保持连接打开以提高性能(keep-alive=true)。

问题是:打开通道的数量有一个硬性限制,超过这个限制后,客户端在尝试打开通道时会挂起。为什么没有例外只是挂起?这是通道超时的设置吗?

我似乎无法理解Netty对工作线程内连接的整体管理:

  • 使用阻塞写/读客户端ChannelHandler(http请求/响应),如何检测连接池为空?

  • 处理程序可以接收ChannelEvent,但不能接收连接池中可用的总计数(无论如何,这是非常不确定的)。如果通道没有打开,那么处理程序在工作线程中运行的情况下启动打开新通道有意义吗?

  • 但是,如果连接池已经用完,如何清理(处理程序中的)一些空闲连接

我不得不完全拆开我的处理程序,让客户端阻塞调用在不挂起的情况下工作。该问题主要是通过在处理程序中不保留本地通道ref来解决的。

现在,我们只需将ConnectionInterface#openConnection()[返回一个新的ChannelFuture]传递到共享的自定义ChannelHandler#调用(ConnectionInterface ConnectionInterface,HttpRequest请求)中。

最好在处理程序调用方法中打开通道,并在channel.write(x),if!channel.isWritable()然后循环使用该通道(来自新的客户端连接,例如ConnectionInterface#openConnection())并重试写入。甚至不需要关闭通道(它在池中处理)。

只是用500个线程/5000个请求运行它,它很好地成功了。

最新更新