Ограничения по скорости загрузки файлов?

Я подумываю о настройке файлового хоста (в основном для упражнений), но как вы гарантируете, что бесплатные пользователи могут работать только со скоростью 40-50 кбит / с, а премиум-пользователи могут работать на более высоких скоростях?

Я предполагаю, что вы размещаете все файлы на 2 отдельных серверах и просто контролируете подключение к порту (10 Мбит против 1000 Мбит), но для этого потребуется установка зеркального жесткого диска.

Могу поспорить, что со всеми файловыми хостами должно быть более простое решение.


person user1934039    schedule 08.04.2013    source источник
comment
Изменить: кажется, я нашел кое-что здесь: stackoverflow.com/ вопросов/4002106/ по крайней мере, кажется, что он работает (в настоящее время тестирует его с постоянными 75 кбит/с).   -  person user1934039    schedule 08.04.2013
comment
Это очень круто, мне нравится.   -  person Mike D.    schedule 08.04.2013
comment
Что касается ссылки, которую я разместил выше, это нижний скрипт на этой странице, который я тестирую: stackoverflow.com/a/12245044/1934039   -  person user1934039    schedule 08.04.2013


Ответы (2)


Это будет реализовано на уровне веб-сервера. Этот вопрос, вероятно, будет касаться того, как реализовать регулирование, если вы используете apache: Как я могу реализовать ограничение скорости с помощью Apache? (запросов в секунду)

Что касается выполнения этого для каждого пользователя, может быть способ взаимодействия с этими директивами конфигурации apache из php, или вы можете просто иметь два виртуальных хоста, один из которых заблокирован для определенных пользователей и с более высокой скоростью дросселирования.

person Mike D.    schedule 08.04.2013
comment
пусто, добавлен комментарий к исходному сообщению - person user1934039; 08.04.2013

Вы можете напрямую контролировать пропускную способность в пользовательской среде PHP, например. bandwidth-throttle/bandwidth-throttle

use bandwidthThrottle\BandwidthThrottle;

$in  = fopen(__DIR__ . "/resources/video.mpg", "r");
$out = fopen("php://output", "w");

$throttle = new BandwidthThrottle();

if ($user->isPremium()) {
    $throttle->setRate(500, BandwidthThrottle::KIBIBYTES); // 500KiB/s
} else {
    $throttle->setRate(50, BandwidthThrottle::KIBIBYTES); // 50KiB/s
}

$throttle->throttle($out);

stream_copy_to_stream($in, $out);
person Markus Malkusch    schedule 09.08.2015