Я решил эту проблему с помощью подписок GraphQL. Тот же подход может быть реализован с использованием WebSockets. Чтобы решить эту проблему, выполните следующие действия:
Отправка файлов на сервер загрузки
Создание уникального идентификатора операции и отправка его в ответ на запрос. клиент
Пример: response = {op: "A78HNDGS89NSNBDV7826HDJ"}
Создать подписку по opID
Например: subscription { uploadStatus(op: "A78HNDGS89NSNBDV7826HDJ") { status }}
Каждый раз при изменении статуса отправляйте запрос конечной точке GraphQL, которая публикует данные в pubsub. Для отправки запроса GraphQL с сервера nodejs вы можете использовать
https://github.com/prisma-labs/graphql-request Пример:
const { request } = require('graphql-request');
const GQL_URL = "YOUR_GQL_ENDPOINT";
const query = `query {
notify ("Status text goes here")
}`
request(GQL_URL, query).then(data =>
console.log(data)
)
Функция решателя уведомлений публикует данные в pubsub
context.pubsub.publish('uploadStatus', {
status: "Status text"
});
Если у вас более сложная архитектура, вы можете использовать брокеры сообщений, такие как RabbitMQ, Kafka и т. Д.
Если кто-то знает другие решения, сообщите нам)