Можно ли выполнять какие-либо параллельные вычисления в поле GraphQL Object с использованием Tokio и Juniper? - PullRequest
0 голосов
/ 18 декабря 2018

Этот вопрос может тесно связан с этой проблемой GitHub .

У меня сервер GraphQL, написанный на Rust с использованием Juniper.Этот сервер должен выполнить некоторые HTTP-запросы для создания и отправки данных, требуемых клиентами.

В некоторых полях может потребоваться максимум ~ 15 HTTP-запросов (в основном, наборов).Последовательное выполнение этих запросов может занять некоторое время, и я подумывал об использовании Tokio + Futures для их параллельного выполнения.Это кажется технически выполнимым, но до сих пор я понятия не имею, как на самом деле реализовать такое решение, и не смог найти ни одного примера с использованием Juniper и Tokio, пока не обнаружил проблему GitHub, упомянутую ранее...

Примерно так:

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

Где ??? равно FieldResult<Vec<AnyResource>> (?).И если да, то как?

1 Ответ

0 голосов
/ 18 декабря 2018

Juniper еще не настроен для обработки параллельного разрешения полей и не интегрируется ни с какими асинхронными средами, такими как Tokio.Вместо этого вы можете сделать это самостоятельно под одеялом.Если у вас есть итератор запросов, которые вам нужно сделать, вы можете перенести их в пул потоков с помощью ящика Rayon, который предоставляет функцию .par_iter(), которая может автоматически распараллеливать работу.

Я тоже заинтересован в переводе Juniper на асинхронную модель, но эта работа, скорее всего, не начнется до тех пор, пока асинхронное / ожидающее приземление не станет стабильным.

...