@Screpka

Как заставить цикл отработать 1 раз, не зависимо от запросов пользователей?

Со своим первым вопросом, я вроде как разобрался.
Теперь нужно решить задачку с циклом while в этом коде
$context = new ZMQContext();
$subscriber = $context->getSocket(ZMQ::SOCKET_SUB);

// Connect to the first publicly available relay.
$subscriber->connect("tcp://relay-us-central-1.eve-emdr.com:8050");
// Disable filtering.
$subscriber->setSockOpt(ZMQ::SOCKOPT_SUBSCRIBE, "");

while (true) {
  // Receive raw market JSON strings.
  $market_json = gzuncompress($subscriber->recv());
  // Un-serialize the JSON data to a named array.
  $market_data = json_decode($market_json);
  // Dump the market data to stdout. Or, you know, do more fun things here.
  // var_dump($market_data);
}

так, чтобы он отрабатывал 1 раз, допустим каждый час, при любом количестве запросов пользователей. Как это сделать? Может какую проверку на пройденное время сделать, а этот код в функцию записать? или как-то еще?
Помогите, пожалуйста.
  • Вопрос задан
  • 274 просмотра
Решения вопроса 3
dima9595
@dima9595
Junior PHP
Может CRON поможет?
Ответ написан
Комментировать
supervaleha
@supervaleha
Web-development
Солидарен. Цепляйте Cron на каждый час и в нем обращайтесь к скрипту с кодом. Выходит раз в час один раз будет все выполняться.
Ответ написан
iCoderXXI
@iCoderXXI
React.JS/FrontEnd engineer
Начнем с того, что Вы постоянно опрашиваете один и тот же урл, стало быть этот код не имеет прямого отношения к запросу конкретного пользователя. Тем более раз Вы хотите отдавать одни и те же данные в течении часа всем пользователям, то Вам нужно сделать следующее:
1) Опрашивать урл по крону, и его выдачу складывать в кеш
2) По запросу пользователям отдавать данные из кеша

Можно решить и без крона, тогда, опять же, в кеше надо хранить результат выдачи опроса урла, плюс таймер последнего такого опроса. И если таймер меньше нужного интервала, отдавать данные из кеша, не производя запроса, иначе произвести запрос, закешировать данные, обновить таймер и отдать результат пользователю.

Однако, раз опрос долгий, то непредсказуемо тот или иной пользователь будет нарываться на непонятные тормоза. Поэтому, все же, лучше вынести опрос в фоновый процесс и повесить на крон.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы