【问题标题】:How to prevent Netty from removing handlers when channel is closed?通道关闭时如何防止 Netty 删除处理程序?
【发布时间】:2021-12-07 10:17:38
【问题描述】:

我正在使用 Netty 4.1.65.Final。我们有一个代理服务,它接收来自客户端的请求,并将该请求转发到下游服务器。因此,我们有两个通道/管道,一个用于上游客户端,一个用于下游服务器。

上游客户端代理下游服务器

有一种情况,当我们仍在下游通道上处理下游响应时,上游客户端断开连接。 Netty 关闭上游通道,并作为其清理过程的一部分删除管道中的所有处理程序。当我们将下游响应写入上游通道(并返回给上游客户端)时,出站处理程序不会执行,因为它们已被删除。这些处理程序包含需要执行的核心逻辑。

是在写入上游通道之前重新添加出站处理程序并随后在侦听器中清理处理程序的唯一解决方案吗?

也许可以将核心逻辑移动到监听器,但这并不理想,因为我们需要访问 HttpResponse 对象。出站处理程序非常适合这种情况。

【问题讨论】:

    标签: netty


    【解决方案1】:

    真的没有办法做到这一点。需要删除处理程序以确保完成清理,因此会调用 handlerRemoved(...)

    【讨论】:

    • 感谢您回答诺曼,不仅是这个问题,还有其他问题。他们帮了很多忙!我继续并做了解决方法,即将出站处理程序重新添加到关闭的通道,写入响应(这将失败),但出站处理程序中的核心逻辑现在已执行。附加到写入未来的侦听器然后再次从通道中删除出站处理程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    相关资源
    最近更新 更多