我注意到,在标准grails环境中,即使客户端连接丢失并且结果无法再传递,请求始终会执行到最后。
有没有一种方法可以配置环境,使得一旦客户端连接丢失,请求的执行就会被取消?
更新:感谢您的回答。是的-我可以避免的大多数问题都可以通过更好的编码来避免:
但是有些请求仍然会花费一些时间。让我们以 map 服务为例。计算路线需要一些时间。一种避免重新提交请求的解决方案可以是“calculationInProgress”标志以及一条发给用户的消息。但是,为了进行DOS攻击,仍然可以创建很多 session ,从而创建很多请求...
我还是很好奇:没有办法配置服务器取消请求吗?我曾经在服务器表现为这种方式的系统上进行开发,这很棒:-)
最佳答案
可能没有这种方法。而且我敢肯定grails(和您的web容器)旨在
如果在第2阶段发生了某些事情,我只会在发送响应阶段知道这一点。实际上,您可以自己将数据发送到HttpSerlvetRespone,处理IOException等-但我认为这将是太多的低级方法。在准备要发送的数据时,它不会帮助您取消数据库操作。
顺便说一句,使用nginx这样的Web前端是一种常见的模式,它接受传入的请求并处理已取消的请求,缓慢的请求(我想这是真正的问题?)等所有问题。
关于grails - 与客户端的连接丢失时取消请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8676880/