Вызов функции PHP каждую секунду

Есть ли способ выполнить функцию с регулярным интервалом?

У меня есть таблица базы данных, и мне нужно знать, когда запись добавляется или удаляется. Логика, которую я пытаюсь использовать, – это Ajax делает вызов для сервера, но вместо немедленного ответа сервер непрерывно проверяет 30 секунд, если база данных обновляется, если да, то только тогда она отвечает, иначе она реагирует через 30 секунд. Таким образом, я пытаюсь минимизировать нагрузку на сервер, вызывая запросы Ajax каждую секунду.

Как мне это сделать? Использует ли цикл while смысл? Что-то вроде этого может быть –

 while (SomeCondition) { if (CheckIfDatabaseChanged()) { echo "System Updated"; break; } } 

Если это не бессмысленное решение, то как я могу убедиться, что цикл работает только на 30 секунд и разрывается. Или есть лучшее решение?

Solutions Collecting From Web of "Вызов функции PHP каждую секунду"

То, что вы отвлекаете, – это то, что называется длинным опросом, и оно не масштабируется на PHP, особенно когда вы используете блокировку ввода-вывода.

См. https://stackoverflow.com/a/6488569/11926 для получения дополнительной информации.

Но ваш код может выглядеть примерно так:

 set_timeout_limit(31); $i=0; while ($i<30) { // poll database for changes which is a bad idea. i = i + 1; sleep(1); // sleep 1 second } 

Готов поспорить, вы не можете запустить многие из этих параллельных. Мой совет будет использовать что-то вроде redis pubsub, чтобы уведомлять об изменениях в db и каком-то длинном опросе / решении для веб-сайтов.

Если возможно, вы должны создать фоновый процесс, чтобы subscribe на изменения в базе данных, а затем, например, публиковать изменения в pusher , потому что наличие нескольких длинных процессов действительно плохо для производительности.

Вы можете принять их обоих самостоятельно или использовать хостинговые службы, например, например:

Redis:

Длительный опрос / веб-узел:

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


PS : Я также нашел неблокирующее решение в PHP, которое называется React . Это решение может масштабироваться (лучше) в PHP.

Использовать это:

 set_timeout_limit(0) 

http://se.php.net/manual/ru/function.set-time-limit.php