这个问题可能与this GitHub issue密切相关.
我有一个使用瞻博网络用 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>>
(?)。如果是这样,怎么做到的?
最佳答案
Juniper 尚未设置为处理字段的并行解析,并且未与 Tokio 等任何异步框架集成。相反,您可以在幕后自己做一些事情。如果你有一个你需要发出的请求的迭代器,你可以使用 Rayon crate 将它们分配到线程池,它公开了一个函数 .par_iter()
可以自动并行化工作。
我也有兴趣将 Juniper 迁移到异步模型,但这项工作可能要等到 async/await 稳定后才能开始。
关于rust - 是否可以使用 Tokio 和 Juniper 在 GraphQL 对象字段中执行任何类型的并行计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53828783/