我注意到在标准的grails环境中,即使客户端连接丢失且结果无法再传递,也会始终执行请求。
有没有办法以这样的方式配置环境:一旦客户端连接丢失,就会取消执行请求?
更新:感谢答案。是的 - 通过更好的编码可以避免我试图避免的大多数问题:
但有一些请求仍然会花费一些时间。我们以地图服务为例。计算路线需要一些时间。避免重新提交请求的一种解决方案可以是“calculateInProgress”标志以及给用户的消息。但是,为了进行DOS攻击,仍然可以创建大量会话,因此需要很多请求......
我仍然很好奇:有没有办法配置服务器取消请求?我曾经在一个系统上进行开发,服务器就是这样运行的,而且很棒: - )
答案 0 :(得分:1)
可能没有这种方式。而且我确信grails(和你的webcontainer)的设计是
如果在第2阶段发生了某些事情,我只会在发送响应阶段时才知道。实际上你可以自己发送数据到HttpSerlvetRespone,处理IOException等 - 但我认为这将是太低级别的方式。在准备发送数据时,它无法帮助您取消数据库操作。
顺便说一下,使用网络前端的常见模式,如nginx,接受命令请求,并处理所有这些问题,包括取消的请求,慢速请求(我猜这是真正的问题?)等等。
答案 1 :(得分:1)
根据您的评论,您正在尝试避免重新加载和多次点击。正确的技巧应该是使用Grails支持来处理多个表单提交:
http://grails.org/doc/2.0.x/guide/theWebLayer.html#formtokens