检测 HttpServlet 中中止的请求

Esc*_*udo 5 servlets http abort

有没有办法确定 HttpServletRequest 是否中止?

我正在编写一个即时浏览器应用程序(某种聊天):客户端使用 AJAX-HTTP-Requests 在循环中请求新事件。服务器 (Tomcat) 处理 HttpServlet 中的请求。如果此客户端没有新事件,服务器将延迟回复,直到新事件到达或发生超时(30 秒)。

现在我想确定不再轮询的客户端。因此,我在请求结束时启动一个 kick-Timer,当新请求到达时停止。如果客户端关闭浏览器窗口,则 TCP 连接关闭,HTTP 请求中止。

问题:客户端没有遇到 kick-Timeout,因为 Servlet 仍在处理事件请求 - 休眠并等待事件或超时。

如果我能以某种方式侦听连接中止事件,然后通知等待请求以停止它,那就太好了。但是我在 HttpServletRequest 或 HttpServletResponse 中找不到类似的东西......

Jon*_*ott 0

等待请求似乎会很快降低系统的性能。如果请求保持打开状态,响应请求的线程将很快耗尽。您可以尝试完成所有请求(如果没有消息,则向客户端返回“null”),并在后端有一个线程来跟踪客户端轮询以来已经过了多长时间。该线程可以将客户端标记为不活动。