有没有办法控制netty handler的工作时间?

有没有办法控制netty handler的工作时间?,netty,Netty,如果我的处理程序花费了太多的时间,我希望它尽快返回一个错误,但现在我的处理程序将一直工作到它完成为止,所以我的客户端捕获了太多超时异常。如何配置netty服务器? 我试过ReadTimeoutHandler和WriteTimeoutHandler,但都没用?如何使用它? 我的代码如下: p.addLast("idleStateHandler", new IdleStateHandler(1, 1, 1, TimeUnit.SECONDS)); p.addLast("readTim

如果我的处理程序花费了太多的时间,我希望它尽快返回一个错误,但现在我的处理程序将一直工作到它完成为止,所以我的客户端捕获了太多超时异常。如何配置netty服务器? 我试过ReadTimeoutHandler和WriteTimeoutHandler,但都没用?如何使用它? 我的代码如下:

    p.addLast("idleStateHandler", new IdleStateHandler(1, 1, 1, TimeUnit.SECONDS));
    p.addLast("readTimeoutHandler", new ReadTimeoutHandler(1, TimeUnit.SECONDS));
    p.addLast("writeTimeoutHandler", new WriteTimeoutHandler(1, TimeUnit.SECONDS));
    p.addLast("handler", new myHandler());
    Thread.sleep(5000);
    return "ok";
我的处理程序代码如下:

    p.addLast("idleStateHandler", new IdleStateHandler(1, 1, 1, TimeUnit.SECONDS));
    p.addLast("readTimeoutHandler", new ReadTimeoutHandler(1, TimeUnit.SECONDS));
    p.addLast("writeTimeoutHandler", new WriteTimeoutHandler(1, TimeUnit.SECONDS));
    p.addLast("handler", new myHandler());
    Thread.sleep(5000);
    return "ok";
我想要的是当一个请求到来时,1s后,我的服务器返回“超时”,但实际上5s后,它返回“ok”,为什么?如何解决


我已经设置了新的ReadTimeoutHandler(1,TimeUnit.SECONDS),但为什么在5s后我会捕获一个读取超时异常???我应该在1秒后赶上,不是吗

您阻止了线程,因此之前无法获得通知。这是因为Netty使用此线程处理通道的所有IO。

一个选项是将处理程序执行的工作传递给非Netty线程池。这将释放I/O线程来处理超时事件

如果处理程序在任何给定时间每个通道只处理一个任务,那么任务的管理就相对容易。如果可以取消任务,则只需在超时时取消即可。如果无法取消,则设置一个标志以在超时发生时抑制响应

如果处理程序需要同时处理每个通道的多个任务,那么您需要维护一个未完成任务的列表,并决定在超时发生时取消哪个任务


您还可以在单独的事件执行器中运行处理程序。

如何完成我上面所说的?Maurer?