默认情况下,出站处理程序是否应传递给ChannelPromise?

问题描述 投票:0回答:1

关于如何在Netty中进行错误处理的最佳实践,很少(好)资源,我的团队已经看到很多错误被静默吞噬的实例,这使得调试不太好。

我只是想知道一个好的默认策略是简单地传递你在赢得write()时传递给ctx.write(msg,promise)的承诺?

我编写了a bunch of "learning/exploratory"测试以更好地了解Netty的异常处理,并且我发现处理程序管道尾部的异常处理程序比异常源只有每个处理程序传递它时才会调用其promise侦听器。直到那时,我们通常只会做ctx.write(msg),丢失被送进的ChannelPromise。当然,如果你想做别的事情并传递另一个承诺(ctx.newPromise())你这样做,但我想知道是否传递了默认承诺是有道理的。

如果是这样,为什么Netty默认不执行此操作?我认为当调用者调用ctx.write(msg)重载时,这是有道理的,因为大多数人不希望静默删除异常。

exception exception-handling netty
1个回答
1
投票

是的,如果你实现promise,你应该传递ChannelOutboundHandler,实际上这正是ChannelOutboundHandlerAdapter提供的默认实现。如果你没有传递promise,你有责任完全填充它,这可以直接完成,也可以用你创建的另一个ChannelPromise链接它,并在某个时候通过write传递(或者通过返回的ChannelFuture传递) ctx.write(Object)

© www.soinside.com 2019 - 2024. All rights reserved.