【发布时间】:2011-04-25 05:59:21
【问题描述】:
【问题讨论】:
【问题讨论】:
这是我如何在我的一个项目中使用 sleep 的 sn-p:
foreach($addresses as $address)
{
$url = "http://maps.google.com/maps/geo?q={$address}&output=json...etc...";
$result = file_get_contents($url);
$geo = json_decode($result, TRUE);
// Do stuff with $geo
sleep(1);
}
在这种情况下,sleep 帮助我防止被谷歌地图阻止,因为我向服务器发送了太多请求。
【讨论】:
我知道的老问题,但使用 u/sleep 的另一个原因可能是您在编写安全/加密代码时,例如身份验证脚本。举几个例子:
编辑
对定时攻击使用 u/sleep 并不是一个好的解决方案。您仍然可以在定时攻击中获取重要数据,您只需要更多的样本来过滤掉 u/sleep 添加的噪声。
您可以在以下网址找到有关此主题的更多信息:Could a random sleep prevent timing attacks?
【讨论】:
这有点奇怪...文件传输限制。
在我们很久以前运行的文件传输服务中,文件由 10Mbps 上行链路服务器提供。为了防止网络瘫痪,下载脚本会跟踪有多少用户同时下载,然后计算每个用户每秒可以发送多少字节。它会发送这个数量的一部分,然后睡一会儿(我认为是 1/4 秒)然后发送更多......等等。
通过这种方式,服务器以大约 9.5Mbps 的速度连续运行,不会出现上行链路饱和问题……并且始终动态调整下载速度。
我现在不会这样做,也不会在 PHP 中这样做……但当时效果很好。
【讨论】:
另一种使用方式:如果您想每分钟更频繁地执行一次 cronjob。为此,我使用以下代码:
sleep(30);
include 'cronjob.php';
我调用这个文件,每分钟调用一次 cronjob.php。
【讨论】:
一个快速的伪代码示例,说明您可能不想为单个事件收到数百万封警报电子邮件,但您希望脚本继续运行。
if CheckSystemCPU() > 95
SendMeAnEmail()
sleep(1800)
fi
【讨论】:
其中包括:您正在测试一个发出异步请求(AJAX 调用、延迟图像加载...)的 Web 应用程序
您正在本地对其进行测试,因此响应是即时的,因为只有一个用户(您)并且没有网络延迟。
使用sleep 可以让您查看/测试网络应用在负载和网络导致请求延迟时的行为。
【讨论】:
它的一个应用是,如果我通过脚本向 100 多个客户发送邮件,那么此操作最多需要 1-2 秒,因此大多数网站(如 hotmail 和 yahoo)将其视为垃圾邮件,因此为避免这种情况,我们需要在每封邮件后延迟执行。
【讨论】:
超级老帖子,但我想我也会发表评论。 我最近不得不检查一个运行时间很长的进程,它创建了一些文件。所以我制作了一个迭代 cURL 函数的函数。如果我要查找的文件不存在,我休眠 php 文件,然后再检查一下:
function remoteFileExists() {
$curl = curl_init('domain.com/file.ext');
//don't fetch the actual page, you only want to check the connection is ok
curl_setopt($curl, CURLOPT_NOBODY, true);
//do request
$result = curl_exec($curl);
//if request did not fail
if ($result !== false) {
//if request was ok, check response code
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($statusCode == 404) {
sleep(7);
remoteFileExists();
}
else{
echo 'exists';
}
}
curl_close($curl);
}
echo remoteFileExists();
【讨论】:
我通常不会将它用于提供网页服务,但它对命令行脚本很有用。
$ready = false;
do {
$ready = some_monitor_function();
sleep(2);
} while (!$ready);
【讨论】:
我最近在使用 Google 的 Geolocation API 时不得不使用它。循环中的每个地址都需要调用 Google 的服务器,因此需要一些时间来接收响应。我使用usleep(500000) 给所有相关的事情足够的时间。
【讨论】:
另一个示例:您正在运行某种大量使用资源的批处理过程。也许您正在浏览包含 9,000,000 本书的数据库并更新其中大约 10%。该过程必须在中午运行,但要完成的更新太多,运行批处理程序会将数据库服务器拖到其他用户的爬网中。
因此您修改批处理以提交,例如,1000 次更新,然后sleep 5 秒钟,让数据库服务器有机会完成处理来自其他已备份用户的任何请求。
【讨论】:
您可以使用 sleep 来暂停脚本执行...例如延迟服务器端的 AJAX 调用或实现观察者。您还可以使用它来模拟延迟。
我也用它来延迟 sendmail() & co。 .
有人使用 sleep() 来防止 DoS 和登录 brutefoces,我不同意,因为您需要添加一些检查以防止用户多次运行。
还要检查usleep。
【讨论】:
一个有用的地方是创建一个延迟。
假设您已经构建了一个使用curl/file_get_contents 获取远程页面的爬虫。现在你不想在短时间内用太多的请求轰炸远程服务器。因此,您在连续请求之间引入了延迟。
sleep 以秒为单位接受参数,它的朋友usleep 以微秒为单位接受参数,在某些情况下更合适。
【讨论】:
sleep来保证文件上传完整。没有它,脚本就会失败。