1

这个问题可能与这个 GitHub 问题密切相关。

我有一个使用 Juniper 用 Rust 编写的 GraphQL 服务器。该服务器需要执行一些 HTTP 请求,以便构建并发送回客户端所需的数据。

某些字段最多可能需要约 15 个 HTTP 请求(本质上是集合)。顺序运行这些请求可能需要时间,我正在考虑使用 Tokio + Futures 并行运行它们。这似乎在技术上是可行的,但到目前为止我不知道如何实际实现这样的解决方案,也找不到任何使用 Juniper 和 Tokio 的示例,直到我发现前面提到的 GitHub 问题......

类似于以下内容:

graphql_object(Whatever: MyContext |&self| {
    field parallel_requests(&executor) -> ??? {
        multiple_parallel_http_requests()
    }
}

(?)???在哪里。FieldResult<Vec<AnyResource>>如果是这样,怎么办?

4

1 回答 1

0

Juniper 尚未设置为处理字段的并行解析,并且没有与任何异步框架(如 Tokio)集成。相反,您可以在幕后自己做一些事情。如果您有需要发出的请求的迭代器,则可以使用 Rayon crate 将它们分配到线程池,它公开了一个.par_iter()可以自动并行化工作的函数。

我也有兴趣将 Juniper 迁移到异步模型上,但这项工作可能要等到 async/await 稳定后才会开始。

于 2018-12-18T16:25:43.197 回答