Netty中的ReadTimeOutException在向客户端写入响应时未关闭通道

Netty中的ReadTimeOutException在向客户端写入响应时未关闭通道,netty,Netty,我有一台网络服务器。第一个处理程序是ReadTimeoutHandler,后面是业务逻辑处理程序和响应编写器处理程序。假设超时设置为20秒。每当出现超时时,我都希望在响应编写器处理程序中执行三件事exceptionCaught(): 将响应写回客户机 关闭我的业务逻辑启动的一些其他线程 关闭频道 最重要的问题是读取超时应在正确的时间传递给客户机 问题1 如果我只执行3,则客户端会在20秒后正确地看到超时。但是,如果我同时执行1和3,即尝试在关闭通道之前写入响应,则超时消息将在业务逻辑线程完成后打

我有一台网络服务器。第一个处理程序是
ReadTimeoutHandler
,后面是业务逻辑处理程序和响应编写器处理程序。假设超时设置为20秒。每当出现超时时,我都希望在响应编写器处理程序中执行三件事
exceptionCaught()

  • 将响应写回客户机

  • 关闭我的业务逻辑启动的一些其他线程

  • 关闭频道

  • 最重要的问题是读取超时应在正确的时间传递给客户机

    问题1

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

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

    问题2


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

    第一个异常可能是Netty或您的应用程序中的错误。你介意我让你写一个小的应用程序/测试用例来演示这个问题吗?第二个问题其实不是一个棘手的问题,而是关于处理多线程之间的中断/信号。当在业务逻辑线程上调用
    Thread.interrupt()
    时,编写良好的业务逻辑应该自行终止。
    channel.close()