@web_dvlpr

Как реализовать функционал будильника в чат-боте?

Всем привет! Задался немного странной целью реализовать функционал будильника в чат-боте. В общем пользователь задает определенное время, и когда наступает это время, ему приходит определенное сообщение. В общем сейчас я вижу это так: Я беру время пользователя и запоминаю в базу, потом создаю скрипт, который будет запускаться каждые 5 секунд, в нем будут прогоняться все времена всех пользователей из базы и если время совпадает или равно текущее время+-5сек(+-пару сек на время работы скрипта), то отправляем сообщение. Адекватным ли выглядит такое решение или есть какая-то более изящная альтернатива? Никогда не использовал cron и терзают смутные сомнения, что запускать задачу каждые 5 секунд это не комильфо. Заранее всем спасибо!
  • Вопрос задан
  • 139 просмотров
Решения вопроса 1
Ninazu
@Ninazu
Вопрос в следующем. Как часто будут добавлятся "будильники"? Почему именно пал выбор на PHP? Планируется ли дальнейшее расширение системы? Применим ли запуск скрипта из консоли без ограничений по времени выполнения?

class Delay {

	private static $alarms = [];

	public static function addInterval($seconds, $userId) {
		self::$alarms[time() + $seconds][$userId] = $seconds;
	}

	public static function loop() {
		while (true) {
			$dttm = time();

			if (isset(self::$alarms[$dttm])) {
				foreach (self::$alarms[$dttm] as $userId => $seconds) {
					self::$alarms[$dttm + $seconds][$userId] = $seconds;
					echo "User #{$userId} прождал {$seconds} cек\n ";
				}

				unset(self::$alarms[$dttm]);
			}

			sleep(1);
		}
	}
}

Delay::addInterval(5, 1);
Delay::addInterval(10, 2);
Delay::loop();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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