Grails 当与客户端的连接丢失时取消请求

Grails 当与客户端的连接丢失时取消请求,grails,Grails,我注意到,在标准的grails环境中,请求总是执行到最后,即使客户端连接丢失,结果无法再传递 是否有一种方法可以配置环境,以便在客户端连接丢失时立即取消请求的执行 更新:Thanx获取答案。是-我试图避免的大多数问题都可以通过更好的编码来避免: 缓存可以使几乎每个页面都变得快速 令牌有助于避免两次提交内容 但仍有一些请求需要花费一些时间。让我们以地图服务为例。计算路线需要一些时间。避免重新提交请求的一个解决方案可以是“CalculationProgress”标志以及给用户的消息。但是,为了进

我注意到,在标准的grails环境中,请求总是执行到最后,即使客户端连接丢失,结果无法再传递

是否有一种方法可以配置环境,以便在客户端连接丢失时立即取消请求的执行

更新:Thanx获取答案。是-我试图避免的大多数问题都可以通过更好的编码来避免:

  • 缓存可以使几乎每个页面都变得快速
  • 令牌有助于避免两次提交内容
但仍有一些请求需要花费一些时间。让我们以地图服务为例。计算路线需要一些时间。避免重新提交请求的一个解决方案可以是“CalculationProgress”标志以及给用户的消息。但是,为了进行DOS攻击,仍然可以创建大量会话和请求


我仍然很好奇:没有办法配置服务器来取消请求吗?我曾经在一个系统上开发过,服务器就是这样运行的,这非常棒:-)

可能没有这样的方式。我相信grails(以及您的webcontainer)的设计目的是

  • 接受传入请求
  • 在服务器端处理它
  • 发送响应
  • 如果在第2阶段发生了什么,我只会在发送响应阶段知道。实际上,您可以自己将数据发送到HttpSerlvetRespone,处理IOException等,但我认为这将是太低级的方式。当您准备发送数据时,它不会帮助您取消DB操作


    顺便说一句,常见的模式是使用一个web前端,比如nginx,它接受输入请求并处理所有这些问题,包括取消请求、缓慢请求(我想这是真正的问题?)等等。

    根据您的评论,您试图避免的是重新加载和多次单击。正确的技术应该是使用Grails支持来处理多个表单提交:


    是的,请求速度慢才是真正的问题。想象一下,搜索需要一些时间,一个不耐烦的用户多次重新加载页面,因为她认为这可能会有所帮助……我认为您可以通过使用Nginx和适当的cache/etag头,以及一些服务器端缓存(ehcache/memcache/etc)来解决这个问题