php设置延迟响应,php能不能做到,只给某个用户延迟响应,其它用户不受影响?...

因为最近项目怀疑被人恶意刷,打算如果怀疑谁在刷,就延迟他的响应。但是要做到不影响其它人的访问速度。据我所了解,php会给每次的请求开一个线程,比如同时有1000个访问,导致接口反应慢了,我给其中的999个用了这个延迟响应的方法,是不是剩下那1个请求会快?还是一样的速度?

目前我想到的只有用sleep这个方法,不知道靠不靠谱...

识别用户的方法我已经有了,想知道的是延迟这个用户的请求的方法

回答有朋友提到返回http错误码,这是可以,但是我限制判断一个用户的方式,主要是ip和他的识别码,这两个都是可以随时换的,万一他换个ip,就知道只对他的ip做了限制了,之后他只要用动态ip来刷,随时改变他的识别码,就能继续刷我的接口,而延迟返回会被认为是服务器被他拖垮了,他满足了就好

回复内容:

因为最近项目怀疑被人恶意刷,打算如果怀疑谁在刷,就延迟他的响应。但是要做到不影响其它人的访问速度。据我所了解,php会给每次的请求开一个线程,比如同时有1000个访问,导致接口反应慢了,我给其中的999个用了这个延迟响应的方法,是不是剩下那1个请求会快?还是一样的速度?

目前我想到的只有用sleep这个方法,不知道靠不靠谱...

识别用户的方法我已经有了,想知道的是延迟这个用户的请求的方法

回答有朋友提到返回http错误码,这是可以,但是我限制判断一个用户的方式,主要是ip和他的识别码,这两个都是可以随时换的,万一他换个ip,就知道只对他的ip做了限制了,之后他只要用动态ip来刷,随时改变他的识别码,就能继续刷我的接口,而延迟返回会被认为是服务器被他拖垮了,他满足了就好

发送HTTP 104 状态码(传说中的“连接被重置”)。

$Code = 104;

$Text = 'connection reset by peer';

http_response_code($Code);

$Protocol = (isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.1');

header($Protocol . ' ' . $Code . ' ' . $Text);

当然,可以由Nginx来做:发送444(服务端超时响应)或者499(客户端等不及了主动关闭连接):判断IP然后return 444;。

sleep的方法不靠谱,sleep会阻塞进程,sleep后是无法给其他请求提供服务的。你php的进程就那么多,有点阻塞操作都可能影响吞吐量,怎么能sleep呢。

延迟返回的方案还有个问题,既然是恶意刷,他一定有办法可以同时发多个请求,那么延迟返回并不能根本上减少他的请求次数,反而造成请求在服务器积压。如果用你们自己的客户端或者网页,很难做到『恶意』。

延迟返回也有办法做,异步返回请求,反正不要阻塞进程。

综上还是楼上给他4xx的方法好点。

就问知道ip吗?

限制访问频率

相关标签:php

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值