PHP sleep() складывается для нескольких пользователей?

#php #ajax #sleep

#php #ajax #сон

Вопрос:

Складывается ли функция sleep() для всех пользователей, использующих example.php через ajax-запрос?

Если я помещу sleep (2) в example.php ; все ли пользователи подвергаются воздействию / складывают sleep()?

Я в основном хочу ограничить запросы на example.php , без использования небезопасного javascript, вместо этого внутри php. Спасибо

Комментарии:

1. Осталось еще 12 символов.

2. Если вы хотите ограничить запросы, не заставляйте пользователя ждать. Используйте какую-либо базу данных (плоский файл или что-то еще), которая отслеживает пользователей, и если пользователь слишком часто заходит на страницу за определенное время, заблокируйте их доступ. Но просто спящий режим страницы для ограничения запросов абсолютно неверен .

Ответ №1:

Нет. Это sleep(2) повлияет только на одного пользователя. Однако, если вы хотите ограничить скорость, это все равно не лучший способ сделать это.

Теоретически злоумышленник может открыть 1000 одновременных запросов example.php и за 2 секунды выполнить их 1000 раз. Если запросы перекрываются, это теоретически может выполняться столько раз в секунду, сколько захочет злоумышленник (конечно, до емкости сервера).

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

Ответ №2:

Помещение sleep() внутри PHP-файла повлияет на каждую загрузку этого PHP-файла, так что да, у всех пользователей, которые переходят к загрузке example.php , независимо от того, как они это делают, страница будет отложена на 2 секунды.

Однако это не ограничивает запросы example.php , а только приостанавливает их выполнение и возвращает пользователю.

Ответ №3:

Вы не можете ограничить HTTP-запросы к php-файлу на вашем сервере изнутри PHP в том смысле, что в запросе уже действительно поздно что-то ограничивать.

Проверьте с вашим HTTP-сервером или балансировщиком нагрузки перед ним, как вы можете ограничить запросы. Для этого существуют инструменты, и они обычно хорошо справляются. Чаще всего это гораздо лучшая работа, чем вы могли бы реализовать (наверняка с большой сложностью) изнутри PHP.

В любом случае, sleep звучит как совершенно неправильная функция для ограничения запросов.

Я надеюсь, что это полезно и в какой-то степени отвечает на ваш вопрос.

Ответ №4:

Нет, это не ограничивает скорость запросов, которые выполняются example.php . Это только задерживает его выполнение на несколько секунд.

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

Ответ №5:

Используйте мьютексы (flock) для достижения определенного уровня регулирования доступа к ресурсам. Используйте с осторожностью, так как это может стать узким местом вашего сайта, если на нем много трафика.