gpt4 book ai didi

http - 检测 HttpServlet 中中止的请求

转载 作者:可可西里 更新时间:2023-11-01 15:29:21 24 4
gpt4 key购买 nike

有没有办法查明 HttpServletRequest 是否被中止?

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

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

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

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

最佳答案

这可能不会再对 OP 有帮助,但它可能会帮助其他人尝试在 HttpServlet 中检测中止的 HTTP 连接,因为我遇到了类似的问题并最终找到了答案。

关键是,当客户端取消请求时,通常服务器发现的唯一方法是向客户端发送一些数据,在这种情况下会失败。我想检测客户端何时停止等待服务器上的长时间计算,所以我最终通过 HttpServletResponse 的编写器定期将单个字符写入响应主体。要强制将数据发送到客户端,您必须调用 HttpServletResponse.flushBuffer(),如果连接中止,它会抛出 ClientAbortException

关于http - 检测 HttpServlet 中中止的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4371835/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com