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