我正在使用Apache CXF Web 服务堆栈。当客户端在操作完成之前超时或与服务器断开连接时,服务器会继续运行操作,直到操作完成。我想让服务器检测客户端何时断开连接并相应地处理。
有没有办法检测客户端何时使用 Apache CXF 断开连接?使用其他 Java Web 服务堆栈怎么样?
我正在使用Apache CXF Web 服务堆栈。当客户端在操作完成之前超时或与服务器断开连接时,服务器会继续运行操作,直到操作完成。我想让服务器检测客户端何时断开连接并相应地处理。
有没有办法检测客户端何时使用 Apache CXF 断开连接?使用其他 Java Web 服务堆栈怎么样?
我不熟悉Apache CXF,但以下内容应该适用于任何基于 Java Servlet 的框架。
为了确定用户是否断开连接(停止按钮、关闭浏览器等),服务器必须尝试发送数据包。如果 TCP/IP 连接已关闭,IOException
则会抛出 an。
理论上,Java 应用程序可以在处理过程中的不同点发送空格字符。一个IOException
将表示客户端已经离开并且可以中止处理。
但是,这种技术可能存在一些问题:
在处理过程中发送字符会导致响应“已提交”,因此可能无法根据长时间运行的服务器端处理的结果设置 HTTP 标头、cookie 等。
如果输出流被缓冲,空格字符将不会立即发送,从而无法进行充分的测试。可能可以flush()
用作解决方法。
对于给定的框架或视图技术(JSP 等),实现此技术可能很困难。例如,页面呈现代码将无法在响应提交后发送内容类型。