【问题标题】:Netty 4 OrderedMemoryAwareThreadPoolExecutorNetty 4 OrderedMemoryAwareThreadPoolExecutor
【发布时间】:2013-09-11 22:23:25
【问题描述】:

我在 Netty 4.0.7 中找不到 OrderedMemoryAwareThreadPoolExecutor。

我正在编写一个基于 Netty 4.0.7 的代理示例的演示,我正在做从后端到前端的文件传输。

当我的后端服务器将所有字节发送到代理时,服务器将 FIN 连接;

我发现当前端网络的速度比后端网络慢时,后端的channelInActive()在后端的所有读取事件被处理之前触发,我找不到确保关闭事件总是在之后触发的方法所有的读取事件都完成了。

我认为Netty 3.x中的OrderedMemoryAwareThreadPoolExecutor可能会这样做,但是我在Netty 4中找不到,那么Netty 4是如何保证事件处理顺序的呢?

提前致谢

【问题讨论】:

    标签: java netty threadpoolexecutor


    【解决方案1】:

    在 ChannelPipeline 中添加处理程序时只需使用自定义 EventExecutor。

    http://netty.io/wiki/new-and-noteworthy.html#wiki-h2-32

    【讨论】:

    • 感谢您的快速回答,我想确保最后处理关闭事件表单后端,尽管它首先出现在一些读取事件之前。 OrderedMemoryAwareThreadPoolExecutor 会是最佳选择吗? Netty 有办法将关闭事件专门放在事件队列的末尾吗?
    • 你可以在ChannelFutureListener中关闭Channel,添加到一个ChannelFuture中的一个操作。这是你想要的吗?
    • 那么,在那个 ChannelFuture 操作中,我是否有办法检查当前通道上所有未决的 MessageEvents 是否已完成?如果他们都完成了,我可以关闭频道。
    • 为此,您需要向 Channel 写入一个空的 ChannelBuffer 并为其添加一个侦听器。一旦注意到这一点,你就知道一切都写好了
    猜你喜欢
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多