我们需要修改带宽使用情况(我们网站上每个用户)。我想限制每个 IP 的带宽,,。基本上,我们希望连接到我们网站的用户只能(以 2.5Mbps 或每秒 250KB 的速度下载)。虽然我们能够以无限速度缓存和上传。。目前我们没有上限。
答案1
如果你关心公平性,我不建议对每个用户进行限制。只要你的连接数较少,这种方法就有效,但最终所有受限连接的总和会超过你的可用带宽,情况就和没有限制一样糟糕。
有一种东西叫随机公平排队。它将防止单个连接耗尽并提高公平性。它使用哈希算法识别连接,并按循环顺序一次为它们提供一个数据包。
为了使 SFQ 正常工作,您首先必须限制带宽,将队列移动到您可以控制的机器上。这是我经常使用的非常简单的设置:
$TC qdisc del dev eth0 root handle 1
$TC qdisc add dev eth0 root handle 1: htb default 20 r2q 50
$TC class add dev eth0 parent 1: classid 1:1 htb rate 10mbit ceil 10mbit
$TC qdisc add dev eth0 parent 1:1 handle 110: sfq perturb 10
$TC filter add dev eth0 parent 1: prio 3 protocol all u32 match u32 0 0 flowid 1:1
如果您发现这有用,请解释您的动机,我可以提供更复杂的设置来满足您的目的。
答案2
答案3
带宽用于下载和页面浏览
我认为最好在项目上创建额外的层,然后在任何请求(如页面浏览量)后添加一些大小,然后计算响应的大小并与用户流量相加
如果用户使用的带宽超过带宽则使带宽完成响应
答案4
在有限带宽下发送可下载文件的基本技术是用循环替换fpassthru
或readfile
调用,该循环使用 fread 分块读取文件,并使用sleep
或usleep
调用来限制速率。
但这只负责下载文件,不会影响读取不经过 PHP 的静态文件,或读取 PHP 页面的其他输出。您还需要一个中心点,记住每个 IP 地址有多少个并发连接,并在它们之间分配分配的带宽。
最好不要在 PHP 中执行此操作,而是在 Apache 或内核级别执行此操作,当然前提是你不在共享主机上。对于 Apache,有修改版扩大。