2012-01-13 2 views
0

В настоящее время я пишу онлайн-игру. Теперь я должен проверить, произошло ли событие (проверка метки времени в базе данных) и в зависимости от того, какие действия выполняются. Я должен проверять событие каждую секунду.Как запустить скрипт php каждую секунду?

Я хотел использовать cronjob, но с помощью cron вы можете запускать скрипт только каждую минуту.

Моя идея состояла в том, чтобы использовать cron и loop 60 раз в моем сценарии php. Но я думаю, что это не лучшее решение.

Итак, каков наилучший способ запуска скрипта каждую секунду?

+1

Взгляните на это: http://superuser.com/questions/342830/cron-alternative-with-timeouts-and-second-resolution. –

+3

Возможный дубликат: http://stackoverflow.com/questions/1726116/run-a-php-script-every-second-using-cli –

+0

Я думаю, что вы ищете неправильное решение своей проблемы, что, кажется, попросите принципиально другую архитектуру, чем вы привыкли. Что вы пытаетесь достичь? – deceze

ответ

0

Я искал лучшее решение, но кажется, что моя первая идея с чистым кодом - лучшее решение.

Это мой текущий код:

<?php 
set_time_limit(60); 
$start = time(); 

for ($i = 0; $i < 59; ++$i) { 
    // Do whatever you want here 
    time_sleep_until($start + $i + 1); 
} 
?> 
0

Почему бы не изменить сценарий так, чтобы он просто повторял код каждую секунду? Это уменьшит накладные расходы синтаксического анализа и будет менее сложным.

0

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

0

Вы не должны этого хотеть: P. Ни один хост не примет ваш cronjob, который работает каждую секунду каждую минуту? Вы можете сэкономить время, которое оно запустило в базе данных, и в следующий раз, когда вы запустите его, вычислите время между обеими запусками и сделайте необходимые вычисления. каждая секунда - очень плохая идея.

0
$total_time = 0; 
$start_time = microtime(true); 
while($total_time < 60) 
    { 
     //DoSomethingHere; 
    echo $total_time."\n"; 
    //sleep(5); 
    $total_time = microtime(true) - $start_time ; 
    } 

добавить это в кронтаб, чтобы запустить каждую минуту.

Смежные вопросы