【问题标题】:Detecting browser closed in middle of a http request response cycle检测在 http 请求响应周期中间关闭的浏览器
【发布时间】:2016-01-09 15:38:40
【问题描述】:

场景

  1. 连接到 java servlet 的 Web 应用程序。 (使用嵌入式码头)
  2. 高延迟请求,例如生成报告(需要几秒钟)
  3. 用户可以在 http 请求响应周期之间关闭浏览器。

问题

如何在服务器端检测在请求和响应周期之间关闭的浏览器?

虽然问题可以通过使用来自 UI 的另一个请求来解决,但我想知道我们是否可以从通信协议本身获取信息?由于 HTTP 使用 TCP/IP 作为基本协议,我们是否应该能够将其检测为从连接发起方关闭的连接。

我浏览了 servlet api 以及用于配置码头服务器的 api,但找不到任何密切相关的东西。

还解决了这些 stackoverflow 问题

  1. Java Servlet : How to detect browser closing?
  2. How to detect browser close at server side in asp.net?

有什么见解吗?

【问题讨论】:

    标签: java servlets browser tcp jetty


    【解决方案1】:

    当您尝试写入 servlet 输出流/写入器时会出现异常。

    【讨论】:

    • 感谢您的回复。基本上,您指向的是 out.checkError() 方法。我正在寻找一种基于事件的机制,我可以检测到 介于之间并可能停止处理。
    • 我认为不存在这样的事件,但您可以通过在客户端 (javascript) 中侦听 window.close() 来触发您自己的事件并触发第二个 ajax 请求。例如:$(window).close(new function() { ... })
    • 感谢 Joakim 的回复。慢慢接近这样一个事实,即从 java 可能无法从 TCP 启动器获得连接关闭的通知。我从下往上检查,在这种情况下,TCP 协议指定了握手(在发起方和接收方之间)。我目前正在检查它在 java 环境中的可行性,并试图了解为什么常规 java 库中没有提供它。
    • 这篇文章stackoverflow.com/questions/155243/…很好地解释了为什么无法检测到连接关闭,没有通信。严峻的现实:)
    • @arunvg 并且不要忘记,Java(以及 HTTP/0.9、HTTP/1.0、HTTP/1.1、HTTP/2、Servlet 和 WebSocket)支持半封闭连接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多