我有一个 Netty 服务器。第一个处理程序ReadTimeoutHandler
后面是业务逻辑处理程序和响应编写程序处理程序。假设超时设置为 20 秒。每当超时时,我想在响应编写器处理程序中做三件事exceptionCaught()
:
将响应写回客户端
关闭我的业务逻辑开始的其他一些线程
关闭频道
最重要的问题是读取超时应该在正确的时间传达给客户端。
问题 1
如果我只做3,客户端会在 20 秒后正确看到超时。但是,如果我同时执行1和3,即尝试在关闭通道之前编写响应,则会在业务逻辑线程完成后打印超时消息,这可能需要 40 秒。我在这里哪里出错了?
channel.write(....).addListener(ChannelFutureListener.CLOSE)
对比
channel.close()
问题2
如果出现超时,我如何强制终止业务逻辑线程,考虑到我没有在业务逻辑处理程序中捕获异常,而是在之后的处理程序中捕获异常。