Пропускная способность дроссельной заслонки в переполнении стека

Есть ли способ ограничить доставку страницы в чистом PHP?

Я знаю, что это можно сделать для загружаемого файла, но я искал реализацию для обычных HTML-страниц.

Я искал, возможно, тип заголовка, который можно отправить

header('Throttle:300kb-ps')

0

Решение

Это возможно, если бы вы использовали потоковый API (например, fwrite()). Затем вы можете зарегистрировать фильтр потока токенов. Я собрал это все для вас в bandwidth-throttle/bandwidth-throttle:

use bandwidthThrottle\BandwidthThrottle;

$out = fopen("php://output", "w");

$throttle = new BandwidthThrottle();
$throttle->setRate(100, BandwidthThrottle::KIBIBYTES); // Set limit to 100KiB/s
$throttle->throttle($out);

fwrite($out, "<html>Your page</html>");
1

Другие решения

Посмотри на apache mod_ratelimit если вы хотите «ограничение скорости пропускной способности» страниц. Он работает для каждого запроса, поэтому вам нужно выяснить, кому предназначен запрос, а затем установить лимит по мере необходимости.

Веб-сервер — это место, где вам нужно это делать, вам нужно всего лишь использовать php для управления им.

Кроме того, согласно моему комментарию, если бы это было для API и веб-сервисов, я бы «запросил ограничение скорости» их. Когда они сделали n запросов за последние t секунд, верните Server Busy.

Ограничение пропускной способности эффективно только для больших откликов, например, для килобайт передачи данных. Для небольших ответов, таких как ответы API, это не будет иметь никакого эффекта.

0