谷姐:我们都是谷歌迷
We are all Google fans

php大佬进!如何限制php每秒只执行一次?-wfc

Rate this post

a.php实际上每秒有10个ip同时访问,如何实现每秒只执行一个ip的请求,同一秒剩余9个的请求实际上代码是不执行的?
想了半天找不到解题思路

大佬果然厉害,感谢各位

热议
推荐楼 mslxd 4小时前

说得太复杂,,,,

做一个文件锁就行了

touch('abc.lock')

如果存在这个abc.lock 就不执行了

事情做完了,把abc.lock删掉

2楼 司马南 5小时前

等待一秒后执行下一次?

sleep

3楼 FeiLai 5小时前

以我半杯水的水平只能想到用mysql来限制

4楼 wfc 5小时前

等待一秒后执行下一次?

sleep不行的,其他ip请求会执行

5楼 gzlock 5小时前

需要额外的存储来限制,例如redis

6楼 司马南 5小时前

sleep不行的,其他ip请求会执行

包起来啊加个判断,

7楼 wfc 5小时前

需要额外的存储来限制,例如redis

redis也只能限制每个ip在n秒的请求数吧?

8楼 wfc 5小时前

包起来啊加个判断,

其他ip的同一秒请求在a.php会认为是一个新的请求

9楼 snoywing 5小时前

队列,请求都插队列里,如果当前请求在队列是当前秒数第一则处理,队列数据存活周期两秒。
另外利用悲观锁应该也能实现

10楼 wfc 5小时前

队列,请求都插队列里,如果当前请求在队列是当前秒数第一则处理,队列数据存活周期两秒。
另外利用悲观锁 ...

大佬这个好像有用,我找找代码试试

12楼 大雄。 5小时前

不懂

13楼 snoywing 5小时前

wfc 发表于 2022-7-16 07:27
大佬这个好像有用,我找找代码试试

方法非常多了,你也可以利用缓存或session,数组序号为秒数,先push你数据进去,然后查是不是第一,如果是就运行,并清空上一秒的数据
,这都能解决,举一反三

14楼 snoywing 5小时前

如11楼所说,nginx做穿透命中控制也可以

15楼 妖言惑众 4小时前

redis或者nginx limit

16楼 mslxd 4小时前

说得太复杂,,,,

做一个文件锁就行了

touch('abc.lock')

如果存在这个abc.lock 就不执行了

事情做完了,把abc.lock删掉

17楼 plugins 3小时前

生成队列,存储到数据库里面,然后每秒用CRON查询前一秒的队列,选择其中一个执行

18楼 iiss 3小时前

全局队列 卡夫卡等 很多办法

19楼 mean 2小时前

不用现成工具的话(各种网关、阿里的 sentinel),可以自己实现一个限流算法:漏桶或者令牌桶(突发)。确定算法后找对应语言的现成实现,很多时候分布式系统还需要借助中间件(redis, amqp)来具体实施

20楼 c7r1st 1小时前

加锁

22楼 翻车的老司机 14分钟前

目录下生成个时间戳命名的文件,php执行时候读当前时间戳,对比之前那个。

23楼 rw1024 5分钟前

这你得说明下,剩余9个是直接进入队列等待执行,还是直接拒绝请求。
如果进入队列,建议你了解下swoole协程
如果是直接拒绝,在你执行文件里可以使用redis自行封装一个方法
例如:if(!$redis->setOrnull()){header("HTTP/1.0 404 Not Found");}
自行封装setOrnull方法为 判断key是否存在,存在返回false不存在则写入返回true 缓存周期1秒

申明:本文内容由网友收集分享,仅供学习参考使用。如文中内容侵犯到您的利益,请在文章下方留言,本站会第一时间进行处理。

未经谷姐允许不得转载:谷姐靓号网 » php大佬进!如何限制php每秒只执行一次?-wfc
分享到: 生成海报

热门文章

评论 抢沙发

评论前必须登录!

立即登录   注册

买Google Voice认准【谷姐靓号网】

Google Voice靓号列表Google Voice自助购买
切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活