За последние 24 часа нас посетили 17650 программистов и 1721 робот. Сейчас ищут 1008 программистов ...

Sleep убивает сервер, как быть?

Тема в разделе "PHP и базы данных", создана пользователем viphost, 3 июл 2011.

  1. viphost

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

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    Всем привет, написал свой первый простенький скрипт, пока еще очень плохо владею php и не нашел как можно сделать задержку выполнения скрипта на определенное время, что попалось под руку, так это только sleep
    Все было хорошо, но как на сайте появилось порядка 1.5к посетителей сервер у меня зашатался, первым же делом подумал на sleep.
    Сам скрипт заносит в базу данных определенную цифру, что то вроде голосовалки, нажал на кнопку прибавился голос, занесся в базу данных. В sleep указал порядка 20 секунд выполнения, ну собственно скрипт тем самым ложит сервер на лопатки. Есть ли какие то альтернативы sleep?
    Что то вроде временного хранения голоса в каком нибудь кешь файле на сервере или еще что нибудь?
    Крон я не в силах написать, да и думаю это через чур будет для такого скрипта )))

    Подскажите, или лучше наглядно, может быть есть где примеры использования альтернативы sleep
     
  2. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    а смысл в том, чтобы в течение 20 секунд нельзя было ещё добавить голос?
     
  3. viphost

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

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    нет он добавляется, но с задержкой, чтобы юзеру не показывать что голос его добавился, так как это испортит всю идею скрипта. За 20 секунд юзер просто должен кое что сделать, этого времени хватает на выполнение кое чего, а если задержку убрать, то он увидит что голос уже прибавился и остановится на этом, а этого не хотелось бы.
     
  4. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    кое-чего - это посмотреть рекламу?)

    тут принцип наверное такой будет. пользователь нажимает "голосовать", ваш скрипт заносит в базу время голосования, отвечает пользователю "ждем обработки" и завешается. в браузере на этот ответ запускается javascript, который через 20 секунд отправит еще один запрос "я подождал", скрипт проверит время и добавит голос. или без скрипта добавить заговолок Refresh.
     
  5. viphost

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

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    нет не рекламу.
    С скриптом думаю не получится, так как, как я думаю если юзер перезагрузит страницу то он сразу же увидит свой голос.
    Можно ли сделать так?
    В базе данных создать поле в котором будут хранится временный голос, потом через некоторое время из временного поля голос переносится в основное поле, ну как я понял здесь без крона не обойтись.
    Можно ли сделать как то что бы если делать крон скрипт запускал крон сам, т.е. не кронтаб задание делать, а чтобы он сайте запускал файл через некоторое время?
     
  6. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    - данный конкретный задач решается использованием даты-времени добавления голоса. И показом тех где дата меньше текущей - Х сек.
    - вы не должны хотеть что-то делать с сервером. ваш скрипт должен отрабатывать быстро, легко и освобождать свое место. У вас не будет задач где нужно что-то делать на сервере необычное. Все решается разумными методами. Мысли о слипе или чем-то другом - признак сильно кривых рук.
     
  7. viphost

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

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    на счет кривых рук я в этом и не сомневаюсь ))) Я же все таки только начинаю что то сам делать, мне очень понравилось php, то что можно в итоге с помощью него смонстряпать, ну как говорится век живи, век учись, вот я и учусь потихоньку, то что я делаю сейчас, месяц назад для меня было просто не понятно =)