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

时间:2020-03-05 18:49:04  来源:igfitidea点击:

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

有没有一种方法可以检测客户端何时使用Apache CXF断开连接?如何使用其他Java Web服务堆栈?

解决方案

回答

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

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

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

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

  • 在处理过程中发送字符将导致响应"已提交",因此可能无法根据长时间运行的服务器端处理的结果来设置HTTP标头,Cookie等。
  • 如果输出流被缓冲,则空格字符将不会立即发送,从而无法进行适当的测试。可以使用flush()作为解决方法。
  • 对于给定的框架或者视图技术(JSP等),可能难以实现此技术。例如,在提交响应后,页面呈现代码将无法发送内容类型。