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

时间:2018-06-05 12:52:57

标签: exception exception-handling netty

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

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

我写了a bunch of "learning/exploratory"测试以更好地感受Netty的异常处理,我发现处理程序管道尾部的异常处理程序比异常源只有它的承诺如果每个处理程序都传递了侦听器。在此之前,我们通常会ctx.write(msg)执行ChannelPromise,丢失已发送的ctx.newPromise()。当然,如果您希望执行其他操作并传递其他承诺(ctx.write(msg))你这样做,但我想知道如果传递一个默认的承诺是有道理的。

如果是这样,为什么Netty默认不这样做?我认为当调用者调用import json a = 0.001234567 print(json.dumps(a)) json.encoder.FLOAT_REPR = lambda x: "{:e}".format(x) print(json.dumps(a)) json.encoder.c_make_encoder = None json.encoder.FLOAT_REPR = lambda x: "{:e}".format(x) print(json.dumps(a)) 重载时,这是有道理的,因为大多数人都不希望以静默方式删除异常。

1 个答案:

答案 0 :(得分:1)

是的,如果您实施promise,则应传递ChannelOutboundHandler,实际上这正是ChannelOutboundHandlerAdapter提供的默认实现。如果您没有传递promise,则您有责任对其进行全面填充,这可以直接完成,也可以将其与您创建并通过ChannelPromise传递的其他write相关联。在某些时候(或通过ctx.write(Object)

返回的ChannelFuture