如果XHR获得中止(),如何终止长时间运行的Django请求?

时间:2014-06-30 19:10:40

标签: python ajax django

我发起请求客户端,然后我改变主意并致电xhr.abort()

Django对此有何反应?它以某种方式终止线程吗?如果没有,我怎么让Django停止浪费时间试图回应中止的请求?我该如何优雅地处理它?<​​/ p>

2 个答案:

答案 0 :(得分:0)

由于http的工作原理,并且通常在django gunicorn应用程序流程(或uswgi等)的前面有一个前端,因此nginx缓冲了http取消请求。 gunicorns没有信号,它们只是完成处理,然后将任何内容输出到http套接字。但是,如果该套接字关闭,则会出现错误(作为关闭的连接捕获并移动一个)。

因此,如果您可以找到一种方法来生成许多这些请求,那么使用DOS服务器很容易。

但是要回答您的问题,这取决于后端,而使用gunicorn,它将一直持续到超时。

答案 1 :(得分:-1)

只需将Web视为构建易于使用,分布式,松散耦合系统的平台,而不像404状态代码所暗示的那样保证资源的可用性。

我认为创建紧密耦合的解决方案(例如您的想法)违反了Web原则和REST的使用。 xhr.abort()是客户端编程,它与服务器端完全不同。试图将客户端技术收紧到服务器端内部行为是一种不好的做法。

这不仅浪费资源,而且还无法保证Web服务器处理请求的状态。它也可能导致数据不一致。

如果您的请求没有为客户端生成服务器端副作用 可以追究责任。最好忽略它,因为这些请求不会改变服务器状态和通常会缓存响应以获得更好的性能。

如果您的请求可能导致服务器状态或数据发生更改,则为了数据一致性,您可以使用API​​检查更改是否生效。如果有感情,请尝试使用其他API进行回滚。

相关问题