在 Express 服务器上为大型请求替代 GraphQL 长轮询?

Alternative to GraphQL long polling on an Express server for a large request?

Objective

我需要在我的 React 网络应用程序前端显示大量 table 数据。

我的后端是一个带有 GraphQL 层和一些“正常”端点的 Express 服务器。

我的服务器从各种来源获取数据,包括外部 API,它是我当前任务的数据源。

我的服务器有一个我可以自由使用的数据库。我无法从前端直接访问外部 API。

数据全部来自我提到的外部API。事实上,它来自对具有许多不同 ID 的同一端点的多个类似调用。这些单独的调用中的每一个都需要一段时间才能 return 但不会冒超时的风险。

当前解决方案

我的天真实现:我执行一个 GraphQL 查询,其中解析器并行执行对外部服务的所有 API 调用。它使用 Promise.all() 等待它们全部完成。然后它 return 是一个大数组,其中包含我的服务器所需的所有数据。然后我的服务器 return 将数据发送给我。

当前解决方案存在问题

不幸的是,这有时会使我的前端挂起太久而超时(超过 2 分钟)。

建议的解决方案

有没有比在 GraphQL 中手动实现长轮询更好的方法? 这是我目前主要的解决方案:

问题

对于我必须做的这个大请求,是否有比 Express 服务器上的 GraphQL 长轮询更好的替代方案?

想到的一个替代方案是不使用 GraphQL,而是使用标准的 HTTP 端点,但我不确定这是否真的有很大的不同。

我还看到 HTTP/2 具有可能相关的多路复用。我的服务器当前运行 HTTP/1.1,升级对我来说是个未知数。

我看到 here Keep-Alive,这听起来可能是相关的,但在 Safari 中无法使用,这很糟糕,因为我的许多用户使用 Safari 访问前端。

由于技术限制,我无法使用 WebSockets。我也不想在我的客户端上设置一个长得可笑的超时时间(我不确定这是否可能)

我发现 GraphQL 内置了轮询 https://www.apollographql.com/docs/react/data/queries/#polling

最后,我实际上做了一个 REST 轮询系统,服务器发送一个“预期完成时间”,这样轮询频率就可以动态调整。