2016-09-27 97 views
0

spring-mvc中是否有注释或者什么让我在客户端关闭连接或以任何方式取消请求时立即调用某些东西?我得到了一个通常非常快速的休息服务,但可以依赖于用户输入进行几秒钟。一旦客户端断开连接,我想取消服务器端的处理。Spring MVC请求中断挂钩

我可以实现客户端必须不时轮询以获取结果的一些东西,但是当客户端关闭其浏览器或取消一个curl请求时,我想取消这个过程。在这里提供的任何钩子?

+0

这听起来很像一个REST服务。 – chrylis

+0

HTTP是无状态的,你不能那样做。但是,您可以检查TCP连接是否已被中断,因为TCP是有状态的。 – vtor

+0

那么我们不需要称之为REST服务。我有一个过程,可能需要一分钟,并花费资源。如果用户不耐烦并且通过离开一边取消我希望有资源回来。所以我需要一些告诉我客户是否还在等待的东西。但它也应该与curl一起工作,而不需要用户轮询几次,如果它在正确的时间完成或者他的请求被杀死了。 因此,我应该能够拦截的客户端和服务器之间必须存在某种连接或检查类型。问题是如何? –

回答

0

一旦请求被发送到服务器,它不能被取消。

您可以向服务器发送另一个取消上一个过程的请求。您可以在ununload之前使用js/html事件。

你可以看到更多在这里

http://www.w3schools.com/tags/ev_onbeforeunload.asp

jquery beforeunload when closing (not leaving) the page?

+0

如果用户使用另一个客户端会发生什么?例如卷曲。它的开放性和应该以这种方式使用,但它可能会被丢失的连接或其他东西取消。在这种情况下,我想调用一个特殊的方法来取消后端操作。 –

+0

如果连接丢失,请求永远不会到达服务器。一旦连接到达服务器就结束了。了解http是一个异步协议很重要,请求不会附加到其他请求,每个请求都是独立的。 – reos

+0

是的,但是例如阻塞,直到请求返回。那么它如何等待呢?如果我在运行curl请求时终止服务,它会告诉我“通过服务器重置连接”,如果curl可以捕获到我应该可以在服务器上执行此操作,并取消请求正在运行的线程,资源。 –