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

时间:2008-09-07 22:46:38

标签: java web-services cxf webservice-client

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

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

1 个答案:

答案 0 :(得分:2)

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

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

理论上,Java应用程序可以在处理期间的各个点发送空格字符。 IOException表示客户端已经离开,处理可以中止。

但是,这种技术可能存在一些问题:

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

  2. 如果缓冲输出流,则不会立即发送空格字符,从而无法执行适当的测试。可以使用flush()作为解决方法。

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