Запрашиваемая на определенное время?

0

Есть ли способ запросить заданное время из PHP script?

Я хочу написать PHP script, который принимает идентификатор, а затем запрашивает базу данных MySQL, чтобы узнать, есть ли совпадение. В случае, когда другой пользователь еще не загрузил их совпадение, поэтому я пытаюсь запросить, пока не найду совпадение или не пройду 5 секунд, после чего я вернусь 0.

В псевдокоде это то, о чем я думал, но это не похоже на хороший метод, так как я читал запросы на цикл, не является хорошей практикой.

$id_in = 123;
time_c = time();
time_stop = time + 5; //seconds

while(time_c < time_stop){
     time_c = time()
     $result = mysql_query('SELECT * WHERE id=$id_in');
}
  • 0
    Вы хотите отложить выполнение программы на указанное количество секунд?
  • 0
    Можно со сном? сна (5); эхо "сделать что-то";
Показать ещё 4 комментария
Теги:

2 ответа

1
Лучший ответ

Похоже, ваше требование - опросить некоторую таблицу, пока не появится строка с определенным идентификатором. Для этого вам понадобится такой запрос:

SELECT some-column, another column FROM some-table WHERE id=$id_in

(Pro tip: не используйте SELECT * в программном обеспечении.)

Кажется, что вы хотите провести опрос в течение пяти секунд, а затем сдаться. Так что давайте работать через это.

Один выбор - просто sleep(5), а затем опросить таблицу, используя ваш запрос. Преимущество этого в том, что это очень просто.

Другой выбор - это то, что у вас есть. Это заставит вашу программу php забивать за стол так быстро, как может, снова и снова, до тех пор, пока опрос не завершится или пока ваши пять секунд не закончатся. Преимущество такого подхода заключается в том, что ваша программа php не будет спать, когда другая программа попадает в таблицу. Другими словами, он подберет изменение в таблицу с минимальной задержкой. Однако этот выбор имеет огромный недостаток. Забиваясь за стол так быстро, как только можете, вы будете связывать ресурсы на сервере MySQL. Это, как правило, расточительно. Это будет препятствовать эффективному масштабированию приложения (что, если у вас есть десять тысяч пользователей, которые все это делают?) В частности, это может замедлить работу другой программы, которая пытается попасть в таблицу, поэтому она не может получить обновление за пять секунд.

Тем не менее, средняя точка. Попробуйте сделать половину секунды ожидания
 usleep(500000);

прямо перед каждым просмотром таблицы. Это не будет тратить ресурсы MySQL так же плохо. Даже если ваша программа php спит, когда другая программа попадает в таблицу, она не будет долго спать.

0

Нет необходимости делать простой опрос и спать. Я не знаю ваших точных требований, но в целом ваш вопрос задает GET_LOCK() или Поддержка PHP Semaphore.

Предполагая, что процесс загрузки начинается с

SELECT GET_LOCK("id-123", 0);

Теперь ваш поток запросов может ждать этой блокировки:

SELECT GET_LOCK("id-123", 5) as locked, entities.*
  FROM entities WHERE id = 123;

В конечном итоге вы можете обнаружить, что TRIGGER - это то, что вы искали.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню