За последние 24 часа нас посетили 22637 программистов и 1017 роботов. Сейчас ищут 700 программистов ...

Запуск php файла каждую секунду или бесконечный цикл

Тема в разделе "Прочие вопросы по PHP", создана пользователем finlolo, 20 авг 2018.

  1. finlolo

    finlolo Новичок

    С нами с:
    20 авг 2018
    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте, товарищи!

    Вопрос к профи. Сам я не очень опытный, но и не новичок. Поэтому очень прошу не скупиться на помощь. Заранее спасибо!

    Все мы знаем с вами, что такое аукцион. Так вот я сделал автоматический аукцион, где идет обработка ставки через ajax запрос, а проверка на именение данных ( чтобы не обновлять страницу и все было в режиме on-line без перезагрузки) сделана методом long polling.

    Человек заходит, делает ставку ( фиксированную, например, 1 руб), если его никто 20 секунд не перебивает, то он выиграл, если кто-то перебил, то он должен делать еще раз ставку, и так до бесконечности, пока кто-то не выиграет.

    Сейчас возник важный вопрос о проверке времени. Поясняю, если три варианта, но все сомнительные.

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

    2. Запуск скрипта через cron. Так как cron разрешает запустить задачу только минимум 1 раз в минуту, то тут можно запустить несколько со sleep, но будет ли это правильно, если я запущу 60 штук, каждый с инкрементным sleep'ом ( 1,2,3..59 sleep), получается как бы каждую секунду запустится скрипт проверки, но хорошо ли так делать??

    3. Запустить скрипт в бесконечную работу. Во-первых, я не знаю будет ли эта безумная мысль иметь хоть какой-то шанс на жизнь. Во-вторых, не знаю как это сделать. Но, если цикл будет запускать скрипт, который будет работать со sleep в 1 sec, проверяя время, и выставляя закрытие лота, или ( если никто ничего не нажал ), пропускать мимо, то по сути должно работать постоянно, вечно, но верно ли это?

    4. Вот вариант, который возник во время написания этого сообщения. Запускать через крон скрипт, который отработает 60 раз, со sleep в 1 sec. То есть проверил время 60 раз. закрое какие-либо лоты, если есть победители, если нет, то через минуту работы, запустится заново на минуту работы.

    Скажите, пожалуйста, какой из этих вариантов более безопасный ( и для системы, и для сохранности данных), а может я что-то пропустил и вы подскажете другой вариант!
     
  2. lastdays

    lastdays Активный пользователь

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    Не понимаю, зачем усложнять.

    start_date = Время торгов
    end_date = Конец торгов
    Убирать товар, если торги прошли и проверять при ставке.
    Запускаешь крон раз в 1/2/5/10 минут.
    Если время ставки вышло, то смотри действия, если ставка есть - отдать последнему, либо вернуть хозяину.
    Не вижу проблем, чтобы отдать выигранную вещь не сразу, а спустя небольшой промежуток времени. И нагрузка будет нормальной.
     
  3. finlolo

    finlolo Новичок

    С нами с:
    20 авг 2018
    Сообщения:
    2
    Симпатии:
    0
    Усложнять не требуется. Нужно проверять каждую секунду время, так как игра идет онлайн, смысл проверять время спустя минуту, если за 20 секунд уже все решилось.
     
  4. lastdays

    lastdays Активный пользователь

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    Ну вот твоя идея со sleep, как раз таки и усложнит все и не факт, что не случится какой-то сбой.
    Один фиг в секунду секунду с вариантом выше ты не оповестишь пользователя, а вот отдать награду можно и на минутку позже, если это не критично.
    Иначе используй технологии нормальные, а не городи велосипеды, от которых рано или поздно будешь плеваться .
    Пиши демона который будет работать со статусами аукциона, сокеты и т.п.
     
    Valick нравится это.
  5. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    плюсую