1

我有一个 Netty 服务器。第一个处理程序ReadTimeoutHandler后面是业务逻辑处理程序和响应编写程序处理程序。假设超时设置为 20 秒。每当超时时,我想在响应编写器处理程序中做三件事exceptionCaught()

  1. 将响应写回客户端

  2. 关闭我的业务逻辑开始的其他一些线程

  3. 关闭频道

最重要的问题是读取超时应该在正确的时间传达给客户端。

问题 1

如果我只做3,客户端会在 20 秒后正确看到超时。但是,如果我同时执行13,即尝试在关闭通道之前编写响应,则会在业务逻辑线程完成后打印超时消息,这可能需要 40 秒。我在这里哪里出错了?

channel.write(....).addListener(ChannelFutureListener.CLOSE)

对比

channel.close()

问题2

如果出现超时,我如何强制终止业务逻辑线程,考虑到我没有在业务逻辑处理程序中捕获异常,而是在之后的处理程序中捕获异常。

4

0 回答 0