2008-09-07 199 views
6

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

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

回答

2

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

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

理论上,Java应用程序可以在处理过程中的不同点发送空格字符。 IOException将表示客户端已经消失,并且处理可能中止。

但是,有可能是这种技术的几个问题:

  1. 处理过程中发送的字符会导致反应是“承诺”,因此它可能无法设置HTTP头,Cookie等基于长期运行的服务器端处理的结果。

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

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

相关问题