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秒
申明:本文内容由网友收集分享,仅供学习参考使用。如文中内容侵犯到您的利益,请在文章下方留言,本站会第一时间进行处理。
谷姐靓号网



评论前必须登录!
立即登录 注册