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

查看:90
本文介绍了php能不能做到,只给某个用户延迟响应,其它用户不受影响?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

因为最近项目怀疑被人恶意刷,打算如果怀疑谁在刷,就延迟他的响应。但是要做到不影响其它人的访问速度。据我所了解,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;

这篇关于php能不能做到,只给某个用户延迟响应,其它用户不受影响?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆