Задать вопрос

Как выполнять функцию PHP раз в 3 секунды?

Добрый день! Мне необходимо обращаться по API к сервису и получать обновления катировок с фондового рынка раз в 3 секунды и результат записывать в базу в wordpress. Нашел ряд готовых функций в гугле, но проблема в том, что страница грузится минут 5-10, как правильно организовать подобный функционал?
  • Вопрос задан
  • 1212 просмотров
Подписаться 2 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 6
Запуск скрипта через CLI по крону
Ответ написан
Tomio
@Tomio
backend developer (python, php)
Если вам надо каждые 3 секунды слать запрос, то тут самый оптимальный вариант будет такой:
1. Устанавливаете supervisord, настраиваете его конфиг и настраиваете конфиг запускаемого php скрипта (в этом нет ничего сложного, инструкции в интернете имеются)
2. Сам php скрипт у вас будет состоять из бесконечного цикла while, в начале которого у вас будет задержка в 3 секунды:
while (true){
    sleep(3);
    // do some cool (or not) stuff
}

3. Запускаете супервизор и дело в шляпе)

В чём плюс такого подхода:
1. Цикл while (true) никогда не закончится и будет выполнять ваш код каждые N-секунд.
2. Супервизор демонизирует ваш скрипт, и он, по сути, становится сервисом, а не просто php скриптом
3. В конфиге супервизора для вашего скрипта можно указать параметр autorestart=true, и в случае, если скрипт упадет, супервизор его перезапустит без вашего участия (вдруг хост, куда вы по апи стучитесь, упадет на какое-то время)
Ответ написан
BoriHagen
@BoriHagen
А может лучше использовать для этой цели AJAX?
Ответ написан
zkrvndm
@zkrvndm
Архитектор решений
Из браузера каждые 3 секунды шлете запрос на свой сервер, а уже на стороне сервера ваш php-скрипт должен будет по API получить данные, записать их в базу и отдать результат в браузер. Частоту запросов к API имеет смысл ограничить, например если с момента прошлого запроса прошло менее секунды, то берем результат из базы, не делая никаких дополнительных запросов на внешнее API - это чтобы вас не забанили за слишком частые запросы.
Ответ написан
Sanes
@Sanes
#!/bin/bash
i=0

while [ $i -lt 6 ]; do
  /run/your/command &
  sleep 10
  i=$(( i + 1 ))
done
Ответ написан
Комментировать
@nubeera
Спитати власника сайта про наявність АРІ
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы