Вызов функции PHP после тайм-аута

Я пишу приложение PHP, в котором SMS отправляется человеку и ждет «x» минут, пока этот человек войдет в систему. Если человек не войдет в систему в течение «X» минут, база данных будет обновлена ​​соответствующим образом, и следующий ожидающий будет проинформирован.

Я пытаюсь найти способ вызвать функцию через «X» минут, чтобы база данных обновилась и следующий пользователь был проинформирован. Я хочу сделать это, не опрашивая базу данных каждую секунду, чтобы проверить, вошел ли первый пользователь в систему или нет. Я пытаюсь найти способ выполнить проверку один раз по прошествии "X" минут, а затем проинформировать следующего пользователя. Что-то вроде функции Javascript settimeout.

Я хочу сделать это на стороне сервера, и решение должно работать на платформах Windows или Linux.

Пожалуйста посоветуй

Спасибо!

Я наткнулся на пакет PEAR «Диспетчер событий», но нет возможности вызывать события по таймауту. PECL, «Событие», похоже, не поддерживает на моем сервере хостинг-провайдера.

Как насчет «опроса» каждые несколько минут? Например, с заданием cron.

KIKO Software 31.07.2018 16:17

Привет, @KIKOSoftware. Поскольку время ожидания (X минут) устанавливается пользователем, я не хочу угадывать время и опрашивать базу данных. Потому что тогда это будет не в реальном времени. Я пытаюсь минимизировать накладные расходы на опрос каждые несколько минут.

Chin. Udara 31.07.2018 16:20

Используйте библиотеку очередей, например, php-resque, который использует redis для обслуживания очереди. Таким образом, тайм-аут просто приведет к тому, что следующая вещь в очереди начнет обрабатываться.

apokryfos 31.07.2018 16:26

Привет, @apokryfos, спасибо. Это кажется интересным, я обязательно проверю это и сообщу вам здесь.

Chin. Udara 31.07.2018 16:30

Привет @apokryfos. Извините, у меня недостаточно очков репутации, чтобы проголосовать за ваш комментарий. Как установить тайм-аут в этой библиотеке?

Chin. Udara 31.07.2018 16:49

Я не знаю, я никогда не использовал его, но каждая очередь запускается работником очереди, который по сути просто запускает процесс PHP. Если у вас есть что-то вроде set_timeout(X) в вашем коде задания в очереди, это должно работать как средство, гарантирующее, что задание не займет больше X секунд. Тогда ваша задача - добавить что-нибудь в очередь. Рабочий удалит из очереди первую задачу и будет работать над ней, а когда это будет сделано, удалит из очереди следующую.

apokryfos 31.07.2018 16:52

Полный отказ от ответственности. Я прокомментировал вместо ответа, потому что это сложная проблема, и вам нужно будет выполнить некоторые настройки, чтобы заставить ее работать. Очередь - это (imo) самый простой способ сделать это, но я не могу предложить полное решение, которое вам придется изучить подробнее.

apokryfos 31.07.2018 16:54

Привет @apokryfos. Спасибо. Я ценю, что вы нашли время, чтобы прокомментировать и предложить. Я прочитаю об этом подробнее.

Chin. Udara 31.07.2018 17:31
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
8
130
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не смог найти чистого PHP-решения для вышеупомянутого.

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

Пока что это было лучшее решение, которое я мог найти.

Другие вопросы по теме