#php
Как можно сделать ограничение кол-ва запросов к php странице к примеру к 3 в 1 сек, и как это лучше реализовать? P.s Сама страница содержит динамические JSON данные
Ответы
Ответ 1
А вы не ограничивайте доступ, просто кэшируйте результат сохраняя его в оперативной памяти, например, в memcached со сроком хранения 3 секунды. addServer('localhost', 11211); $json = 'error'; if (!($json = $m->get('json'))) { if ($m->getResultCode() == Memcached::RES_NOTFOUND) { // Долго и трудоемко вычисляем JSON $json = '{...}'; // Устанавливаем значение на 3 секунды $m->add('json', $json, 3); } } echo $json; Как только memcached уничтожит ключ json, скрипт не обнаружит его, снова вычислит по динамическому запросу, положит в memcached и отдаст клиенту. В промежутке между этими событиями json будет извлекаться из memcached очень быстро. Тогда вы сможете отдавать произвольное количество запросов, не подвергая нагрузке хранилища, ответственные за генерацию JSON-а. Более того, при возрастании нагрузки вы сможете увеличивать время хранения ключа, а при ее снижении, наоборот, сокращать.Ответ 2
Лучше реализовать это не в PHP, а средствами веб-сервера. Напр. для nginx есть модуль limit_req предназначенный как раз для вашей задачи – ограничения числа запросов в единицу времени. В примерах там приведен конфиг для ограничения по одному IP. Но вы можете задать «ключём» и несколько переменных – напр. IP и версию браузера: limit_req_zone $binary_remote_addr$http_user_agent zone=one:10m rate=3r/s;
Комментариев нет:
Отправить комментарий