Отправка запроса в фоне

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Отправка запроса в фоне

Сообщение unknownby »

Доброго времени суток.

Может кто-нибудь подскажет как реализовать выполнение в фоне и возврат результата в браузере.
Есть actionAnalytics по нажатию на которую открывается представление analytics.
Внутри представления находится JqxGridWidget, который сразу запрашивает данные с сервера через опцию dataUrl.

Код: Выделить всё

'dataUrl' =>  Url::toRoute(['get-data']),
Начинается выполнение actionGetData, в котором создается новый экземпляр класса поиска, отправляется запрос в MySQL, далее подготавливаются данные и идут на выход в данное представление. Подготовка данных - это обычный foreach внутри которого заполняется многомерный массив данными и возвращается обратно.
Подскажите, как можно выполнить данный actionGetData в фоновом режиме и чтобы данные потом пришли в это представление, если оно осталось открытым у пользователя.
Вдруг закроет браузер и фоновая задача не сможет выполниться.

Код: Выделить всё

public function actionGetData()
    {
	$searchModel  = new AnalyticsSearch;

        $query = $searchModel->search(\Yii::$app->getRequest()->get());
	$data = $searchModel->prepareForList($query->asArray()->all());

        \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
        return $data;
    }
Если кто-то предложит очереди, то просьба показать пример такого выполнения.
Т.к. изучал очереди, но не совсем понятно как можно будет сюда вернуть запрос конкретного пользователя.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Отправка запроса в фоне

Сообщение rak »

можно попробовать очередь + вебсокеты
к примеру, http://socketo.me/docs/push
т.е. как-то так:
- при загрузке страницы слушаем вебсокет
- задача на формирование данных ставится в очередь(при загрузке, или ajax, неважно)
- задача в очереди завершается и через zmq передает данные в вебсокет сервер
- если клиент все ещё слушает сокет, то получает инфу и обрабатывает
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Отправка запроса в фоне

Сообщение unknownby »

rak писал(а): 2021.11.05, 12:22 - если клиент все ещё слушает сокет, то получает инфу и обрабатывает
Интересный способ реализации, а если таких пользователей будет одновременно 10 ?
Не будет ли конфликта?
Если одновременно 10 пользователей запустили одну и ту же страницу в очередь и слушают ответ. Первый получает все 10 штук и счастлив :)
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Отправка запроса в фоне

Сообщение rak »

unknownby писал(а): 2021.11.05, 15:32
rak писал(а): 2021.11.05, 12:22 - если клиент все ещё слушает сокет, то получает инфу и обрабатывает
Интересный способ реализации, а если таких пользователей будет одновременно 10 ?
Не будет ли конфликта?
Если одновременно 10 пользователей запустили одну и ту же страницу в очередь и слушают ответ. Первый получает все 10 штук и счастлив :)
так можно ограничивать(например, каждому юзеру при логине создать токен и при подключении к вебсокету передавать этот токен)
при реализации чата сообщение ведь всем не отсылается, а только тому, кому нужно :D
Ответить