Запуск функции / скрипта для каждого пользователя на стороне сервера

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

Так что в основном мне нужна функция, которая работает на сервере в течение нескольких часов на пользователя. Каков наилучший способ сделать это? Я хочу, чтобы сайт мог поддерживать много пользователей (например, 10000+).

Я готов попробовать новые технологии для каждого аспекта сайта, я все еще на стадии разработки и я искал какой-то вклад.

Я смотрел на cron, но не совсем уверен, насколько хорошо он будет работать при работе с таким количеством пользователей …

редактировать: вот типичный сценарий событий;

  • Пользователь нажимает кнопку на сайте и закрывает браузер.

  • Сервер запускает таймер с момента нажатия кнопки, теперь
    сервер проверит, нажал ли этот пользователь другую кнопку в течение определенного периода времени (период времени может меняться для каждого пользователя), например, в течение 30 минут. Если они не нажали другую кнопку, то сервер должен автоматически вставить новую запись в базу данных.
    Сценарий должен будет продолжаться, проверяя каждые 30 минут, скажем, следующие 5 часов.

Спасибо!

1

Решение

Cron будет работать так же хорошо, как вы можете кодировать страницу, на которой он будет работать. Это не ограничение cron.

Вопрос, между прочим, неоднозначен. Возможно, объяснение вашего полного сценария поможет.

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

Вам определенно нужно оптимизировать базу данных InnoDB с надлежащими индексами, чтобы иметь возможность поддерживать более 1000 пользователей.

Чтобы уменьшить количество обращений к базе данных, обычной практикой является запуск сценариев только для того, что вас интересует (поэтому в случае пользователей вы выбираете только тех, кто вошел в систему, скажем, за последние 3 часа)
Это возможно двумя способами: с помощью простого оператора select или путем добавления записей в определенную таблицу на странице входа в систему и удаления их после завершения работы автоматического сценария.

Все это чистая теория, не понимающая, что именно вам нужно делать.

0

Другие решения

Вы говорите что, как Вы хотите сделать, но не Зачем Вы хотите сделать это. Может быть, дайте нам знать Зачем может привести к другому как 😉

Тем не менее, то, что вы можете сделать, это по-прежнему использовать cron (или что-нибудь подобное). Хитрость заключается в том, чтобы иметь

  • last_interaction столбец метки времени
  • maximum_interval колонка
  • daily_runtime колонка

в вашем users база данных. Не оптимизирован, но вы находитесь на этапе проектирования, поэтому не следует обращать слишком много внимания на аспект производительности (за исключением случаев, когда это явно требуется).

0