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

时间:2011-12-30 06:38:22

标签: grails

我注意到在标准的grails环境中,即使客户端连接丢失且结果无法再传递,也会始终执行请求。

有没有办法以这样的方式配置环境:一旦客户端连接丢失,就会取消执行请求?

更新:感谢答案。是的 - 通过更好的编码可以避免我试图避免的大多数问题:

  • 缓存几乎可以使每一页快速完成
  • 令牌有助于避免两次提交内容

但有一些请求仍然会花费一些时间。我们以地图服务为例。计算路线需要一些时间。避免重新提交请求的一种解决方案可以是“calculateInProgress”标志以及给用户的消息。但是,为了进行DOS攻击,仍然可以创建大量会话,因此需要很多请求......

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

2 个答案:

答案 0 :(得分:1)

可能没有这种方式。而且我确信grails(和你的webcontainer)的设计是

  1. 接受传入请求
  2. 在服务器端处理它
  3. 发送回复
  4. 如果在第2阶段发生了某些事情,我只会在发送响应阶段时才知道。实际上你可以自己发送数据到HttpSerlvetRespone,处理IOException等 - 但我认为这将是太低级别的方式。在准备发送数据时,它无法帮助您取消数据库操作。

    顺便说一下,使用网络前端的常见模式,如nginx,接受命令请求,并处理所有这些问题,包括取消的请求,慢速请求(我猜这是真正的问题?)等等。

答案 1 :(得分:1)

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

http://grails.org/doc/2.0.x/guide/theWebLayer.html#formtokens