rust - 是否可以使用 Tokio 和 Juniper 在 GraphQL 对象字段中执行任何类型的并行计算?

标签 rust graphql rust-tokio juniper

这个问题可能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/

相关文章:

rust - 为什么 poll() 内的延迟 future 在我的自定义流类型中不起作用?

rust - 在递归函数中使用 impl Trait

rust - 如何停止超 HTTP Web 服务器并返回错误?

image - 找不到 image::ImageBuffer::from_vec() 的函数或关联项

multithreading - 如何从标准库生成的线程向 Tokio 异步任务发送消息?

graphql - req 在 Apollo Server 上下文中始终未定义

node.js - 聚合函数返回 null GraphQL

javascript - 如何将 GraphQL 中的对象元素推送到 javascript 对象中的嵌套数组中?

rust - 如何编写一个简单的返回json或html的扭曲处理程序?

asynchronous - 如何异步浏览目录及其子目录?