使用ajax轮询减轻django石墨烯的繁重请求



我正在进行一些查询,这些查询会导致超时。因为在某些非常特殊的边缘情况下,在服务器上计算数据的时间太长。对于我的特定堆栈,什么是最佳解决方案?我想每隔20秒左右轮询一次服务器,看看我的数据是否准备好了。但我不知道如何做到这一点。或者如何跟踪哪个客户提出了我目前正在处理的请求。

我的堆栈:

  • 石墨烯
  • Django
  • 阿波罗

由于您使用的是Django,因此可以使用Django通道在Django中启用websocket。

使用websocket,您可以在数据准备就绪时从服务器向发出请求的客户端发送异步通知,这样您就不需要每秒轮询一次。

在这个链接中,有创建双向通信的所有信息。本教程适用于聊天系统,但您可以轻松适应您的需求

您可以选择。一个是Apollo重试链接,您可以使用如下

const myLink = new RetryLink({
delay: {
initial: 300,
max: Infinity,
jitter: true
},
attempts: {
max: 5,
retryIf: (error, _operation) => !!error
}
});

我认为这是最简单的方法。重试链接文档

第二种选择是使用订阅而不是查询。订阅是客户端和服务器之间的一个开放链接,通常用于聊天应用程序或任何实时需要的东西,所以你可以使用它,当服务器完成计算时,客户端会得到响应。您必须在客户端和服务器端做一些工作才能使其正常工作。

最新更新