使用Spring如何拦截客户端断开连接?

3

我有一个基于Spring的Web服务(JAX-RS),当一个长时间的操作运行时,我想拦截客户端断开连接。

例如,当客户端执行HTTP调用时,在服务器上创建了大量工作,但由于某种原因(进程终止)而断开连接,我想拦截该断开连接并取消服务器上的工作,因为客户端永远不会得到他所等待的结果。

在Spring中是否可能实现这一点?

谢谢!


为什么不异步开始处理,并创建一个像 getStatus() 这样的方法,供客户端定期检查状态。应该可以解决问题。 - ant
我会提供给客户一个阻塞式的方法。 - Elad Tabak
1个回答

2

不,但这与Spring无关。

即使您直接访问用于HTTP传输的套接字,也无法在不尝试从中读取或写入数据的情况下检测到对等方已关闭套接字。显然,在不与任何HTTP协议处理程序发生冲突的情况下,这是不可能的,并且还需要尝试使用套接字。


我认为他可以使用基于window.onbeforeunload事件的javascript来实现一些解决方法,并通过ajax触发所需的停止。 - Josef Prochazka
2
我不同意。可以知道TCP套接字是否已经优雅地关闭:https://en.wikipedia.org/wiki/Transmission_Control_Protocol#Connection_termination(“当一个端点希望停止连接的一半时,它会发送一个FIN数据包,另一端会用ACK进行确认。”) - stackular

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接