【问题标题】:Django send multiple responsesDjango 发送多个响应
【发布时间】:2021-12-22 04:01:47
【问题描述】:

免责声明:Django 新手,不了解这里的所有高级内容,因此可能会以误导的方式引用我的问题。

我已经建立了一个 Django Web 服务器,它在服务器端对一些网络数据进行一些数值计算,并将数据返回给客户端。现在,用户请求的任务有多个结果,它们是按顺序生成的。

现在,我在做什么 (1) 用户从前端发送任务请求---> (2) 计算在后端按顺序完成并生成所有结果 ---> (3) Django 发送所有结果都在一个单一的响应前端更新结果。

现在第二步,即计算部分需要花费大量时间,大约 1-2 分钟,这会破坏客户端的用户体验。

由于多个结果是按顺序生成的,因此我可以在生成结果时将结果一一显示给客户端。但我不明白如何针对单个客户端请求发送多个响应。我想这对 HTTP 是不可能的?谁能帮我解决这个问题?有可能吗?

【问题讨论】:

  • 两种可能的方式,1. 轮询,2. 使用网络套接字(django 频道)

标签: python django


【解决方案1】:

你根本做不到。

如果响应由两部分组成,其中一个很容易获得,另一个需要很长时间,我建议您在 FE 中将其拆分为 2 个不同的调用。

另一个可能的选项是为计算分配一个 ID,并返回一个立即响应,其中包含 FE 可以获取结果的链接。然后,FE 需要循环调用该拾取链路,直到计算完成。在这种情况下,您需要(至少暂时)存储请求 ID 和计算结果。

在我看来,第二个选项很麻烦。当您需要运行后台任务时,通常会使用工作队列的概念,但这对于 1-2 秒的作业(请参阅this question)来说可能是多余的,并且 FE 仍然需要通过另一个调用来获取结果。

编辑:为了完整性 - 现在有异步双向通信方式。例如 GraphQL 有一个叫做订阅 (docs here) 的东西。然而,这些绝不是开箱即用的 Django 工具,可能需要大量开销。

【讨论】:

    猜你喜欢
    • 2021-04-22
    • 2016-06-12
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    相关资源
    最近更新 更多