我刚看了一下这些文档sleep()
.
你会在哪里使用这个功能?
是否可以让CPU在昂贵的功能中中断?
有任何常见的陷阱吗?
它找到使用的一个地方是创建一个延迟.
假设您已经构建了一个使用curl
/ file_get_contents
来获取远程页面的爬虫.现在你不想在短时间内用太多的请求轰炸远程服务器.因此,您在连续请求之间引入延迟.
sleep
以秒为单位usleep
获取参数,其朋友以微秒为单位获取参数,在某些情况下更合适.
另一个例子:您正在运行某种批量处理,这会大量使用资源.也许你正在走9,000,000本书籍的数据库,并更新其中约10%的书籍.该过程必须在当天中午运行,但是有很多更新要做,运行批处理程序会将数据库服务器拖到其他用户的爬网状态.
因此,您修改批处理以提交,例如,1000次更新,然后sleep
持续5秒,以使数据库服务器有机会完成处理来自已备份的其他用户的任何请求.
以下是我sleep
在其中一个项目中使用的片段:
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
帮助我防止被Google地图阻止,因为我向服务器发送了太多请求.
编辑:这是codaddict所说的一个例子.
我知道这个老问题,但使用u/sleep的另一个原因可能是在编写安全/加密代码时,例如身份验证脚本.几个例子:
您可能希望通过使登录脚本有目的地减慢速度来降低潜在暴力攻击的有效性,尤其是在几次尝试失败之后.
此外,您可能希望在加密期间添加人工延迟以减轻定时攻击.我知道你很可能会用像PHP这样的语言编写如此深入的加密代码,但我认为这仍然有效.
编辑
使用u/sleep来防止定时攻击不是一个好的解决方案.您仍然可以在定时攻击中获取重要数据,您只需要更多样本来过滤掉您/睡眠添加的噪音.
您可以在以下位置找到有关此主题的更多信息:随机睡眠是否可以防止定时攻击?