2010-11-28 34 views
1

我正在尝试创建一个简单的文件托管脚本。我正在学习PHP自己的过程中,因此面临一些困难。PHP实时带宽

想法是让每个用户的帐户有自己的带宽分配(下载)。

我不知道这是如何完成的。我做了一些搜索,但我找不到我的答案。据我所知有两种方法可以做到这一点,

  1. 找出下载的文件大小,假设该文件应该完成,将其添加到使用的带宽。

这样做的问题是如果文件已被部分下载,它会提供不准确的结果。

  1. 找出传输的字节。

我不知道这是怎么完成的......缓冲?

我想要做的一个很好的例子就像Rapidshare。他们有一个非常准确的方法来计算使用多少带宽。

请启发我一些可能的方法来做到这一点。

回答

0

对于带宽限制资源的大小为irelevant。你可以使用像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);