在长时间轮询时 tomcat/jersey 关闭期间,ServletContextListener 钩子延迟了 7 秒,为什么?

During tomcat/jersey shutdown while long polling, the ServletContextListener hook is delayed by 7 seconds, why?

提问人:Niels 提问时间:10/25/2023 更新时间:10/25/2023 访问量:13

问:

我的设置是 Windows10 / eclipse / tomcat8 / jersey。 我有一个简单的后端,可以处理来自前端的一些ajax长轮询。

现在,如果没有前端运行,当我想让 tomcat 停止时,我会在 eclipse 的“服务器”面板中按“停止”。这起到了魔咒的作用,雄猫在一秒钟内就停止了。

但是,当我有一个当前正在执行长时间轮询的前端时,我按下“停止”,无论剩余的长轮询时间如何,总共需要大约 8 秒(我尝试了 10 秒和 15 秒)。

我想,也许我只需要在关机前立即中断长时间的轮询,所以我使用 @WebListener 安装了一个 ServletContextListener,我得到了 contextDestroyed 回调,但只需 7 秒后按下“停止”。这无济于事..

目前在 jersey 2.41 和 servlet-api 3.1.0 上。长轮询是使用 @Suspended AsyncResponse 实现的。

有没有更早到来的替代回调?我错过了什么吗? 任何帮助都表示赞赏。

Tomcat Jersey 长轮询 ServletContextListener

评论


答: 暂无答案