检测Web服务中的客户端断开连接

Chr*_*ail 6 java web-services cxf webservice-client

我正在使用Apache CXF Web服务堆栈.当客户端在操作完成之前超时或断开与服务器的连接时,服务器将继续运行该操作,直到完成为止.我希望服务器检测客户端何时断开连接并相应地处理它.

有没有办法检测客户端何时使用Apache CXF断开连接?那么使用其他Java Web服务堆栈呢?

Joh*_*eff 2

我不熟悉Apache CXF,但以下内容应该适用于任何基于 Java Servlet 的框架。

为了确定用户是否已断开连接(停止按钮、关闭浏览器等),服务器必须尝试发送数据包。如果 TCP/IP 连接已关闭,IOException则会抛出 。

理论上,Java 应用程序可以在处理过程中的不同点发送空格字符。一个IOException信号表明客户端已经离开并且可以中止处理。

然而,这种技术可能存在一些问题:

  1. 在处理期间发送字符将导致响应被“提交”,因此可能无法根据长时间运行的服务器端处理的结果来设置 HTTP 标头、cookie 等。

  2. 如果输出流被缓冲,则空格字符将不会立即发送,从而无法执行充分的测试。或许可以将其用作解决flush()方法。

  3. 对于给定的框架或视图技术(JSP 等),实现此技术可能很困难。例如,页面呈现代码将无法在提交响应后发送内容类型。