Пропускная способность PHP в реальном времени - PullRequest
1 голос
/ 28 ноября 2010

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

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

Я не уверен, как это сделать. Я немного искал, но не могу найти ответ. Насколько я знаю, есть два способа сделать это,

  1. Узнайте размер загруженного файла, сделайте предположение, что файл должен быть заполнен, добавьте его к используемой пропускной способности.

Проблема в том, что если файл был частично загружен, это приведет к неточному результату.

  1. Найти переданные байты.

Понятия не имею, как это делается ... Буферизация?

Хороший пример того, что я пытаюсь сделать, это что-то вроде Rapidshare. У них есть действительно точный метод расчета того, сколько пропускной способности было использовано.

Пожалуйста, просветите меня некоторыми возможными способами сделать это.

Ответы [ 2 ]

1 голос
/ 28 ноября 2010
0 голосов
/ 09 августа 2015

Для ограничения полосы пропускания размер ресурса не имеет значения. Вы можете использовать алгоритм, такой как Token Bucket. Я положил все в библиотеку для вас: bandwidth-throttle/bandwidth-throttle. Самая сложная часть - это общая корзина токенов, так как вы хотите установить ограничение на пользователя.

use bandwidthThrottle\BandwidthThrottle;
use bandwidthThrottle\tokenBucket\storage\PDOStorage;

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

$throttle = new BandwidthThrottle();
$throttle->setRate(100, BandwidthThrottle::KIBIBYTES); // Set limit to 100KiB/s
$throttle->setStorage(new PDOStorage($userId, $pdo)); // Set the limit per user
$throttle->throttle($out);

stream_copy_to_stream($in, $out);
...