Netty 多线程在 4.1 版中损坏?无法处理长查询后的短查询?

Netty multithreading broken in version 4.1 ? Unable to process short queries after long ones?

我只想设置一个非常普通的服务器:它必须接受连接并进行一些业务计算以得到 return 答案。计算可以很短也可以很长 -> 我需要某种 ThreadPoolExecutor 来执行这些计算。

在我们使用了很长时间的 netty 3 中,这很容易实现,只需在我的 BusinessHandler 之前在管道中使用 ExecutionHandler。

但现在尝试在 netty 4 中设置相同的东西,我在文档中读到 ExecutionHandler 不再存在,并且我在将我的 BusinessHandler 添加到通道管道时添加以指定 EventExecutor。

DefaultEventExecutorGroup applicativeExecutorGroup = new DefaultEventExecutorGroup(10);
...
ch.pipeline().addLast(applicativeExecutorGroup, businessHandler);

它适用于非常基本的场景(仅短查询),但不适用于以下场景。 原因是 DefaultEventExecutorGroup 不会 select 一个免费的工作人员,而是任何一个基于循环的工作人员。

我的管道是否有其他可行的配置?例如,是否存在 EventExecutor 的实现,它可以像标准执行器一样工作(select 一个免费的工作人员)。 或者它只是 netty 4.1 中的一个错误?这看起来很奇怪,因为这对于任何服务器来说都是很常见的情况。

感谢您的帮助。

根据您上面的解释,我认为您想使用 UnorderedThreadPoolEventExecutor 来替代 DefaultEventExecutorGroup。或者如果顺序很重要 NonStickyEventExecutorGroup.