PHP sleep () складывается для нескольких пользователей? - PullRequest
1 голос
/ 24 октября 2011

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

Если я поставлю sleep (2) в example.php;все ли пользователи получают ответ / добавляют sleep ()?

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

Ответы [ 5 ]

2 голосов
/ 24 октября 2011

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

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

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

2 голосов
/ 24 октября 2011

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

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

0 голосов
/ 25 октября 2011

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

0 голосов
/ 24 октября 2011

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

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

0 голосов
/ 24 октября 2011

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

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

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

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

...