使用PHP或Apache(我还考虑在必要时转移到Nginx),如何让一个页面一次只运行一次?如果三个请求同时进入,则一个完全完成,然后是下一个,然后是下一个。在任何时候都不应该一次通过多个请求访问页面。
把它想象成交易!我怎样才能做到这一点?它应该是每个服务器一页,没有用户或IP。
答案 0 :(得分:1)
您想对服务器上的“忙”状态做什么?立即返回错误或保持请求等待上一次完成?
如果您只是希望服务器拒绝客户端的内容,您可以在nginx和apache上执行此操作:
您的请求中的“棘手”部分不是像人们通常想要的那样限制IP,而是根据URI全局限制。我知道应该可以使用mod_security芽我自己没有这样做,但我有这个配置适用于nginx:
http {
#create a zone by $package id (my internal variable, similar to a vhost)
limit_req_zone $packageid zone=heavy-stuff:10m rate=1r/s;
}
然后:
server {
set $packageid some-id;
location = /some-heavy-stuff {
limit_req zone=heavy-stuff burst=1 nodelay;
}
}
它对我的作用是创建N个限制区域,每个服务器一个。然后,该区域用于计算请求,并且每秒只允许1次。
希望有所帮助
答案 1 :(得分:0)
如果同一用户从同一页面发出请求,则使用session_start()这将阻止其他请求,直到完成第一个请求
示例:
http://codingexplained.com/coding/php/solving-concurrent-request-blocking-in-php
如果要阻止来自不同浏览器/客户端的请求,请将条目保留在数据库中并逐个处理。