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