php做一个排队等候的功能

为了防止并发数过大,做一个限制,假如限定同时访问的人数不能超过10人,超过10人,就返回等候的页面,请问大神们怎么做。用户进来的时候怎样保存并判断是否超过限定人数,退出或... 为了防止并发数过大,做一个限制,假如限定同时访问的人数不能超过10人,超过10人,就返回等候的页面,请问大神们怎么做。
用户进来的时候怎样保存并判断是否超过限定人数,退出或者直接把浏览器关闭了,怎样把这个空缺填补上。
展开
 我来答
yangyze
推荐于2018-03-20 · TA获得超过364个赞
知道小有建树答主
回答量:542
采纳率:0%
帮助的人:346万
展开全部

你这个问题归根结底是想要做一个实时在线人数的功能:

但是http请求是无状态的,所以你没有办法实时知道多少人在线,就是说没有办法精确响应用户把浏览器关了,服务器就能知道并且把把用户标记为下线


解决办法:

服务器里维护一份列表,这个列表记录了每个用户的session_id,有效期比如可以设置为30分钟,在用户每次请求的时候都刷新下这个有效期,用户点击退出时就删除这个用户的session_id。

因此统计这个列表里未过期的sessionid个数就是当前的实时人数


这份表根据你系统的规模,可以是文本,mysql,也可以是memcache redis 都行


存在问题:

  1. 用户只是三十分钟停留在页面但是没有退出的系统把他认为下线了。这个可以通过“心跳包”来解决

  2. 用户关闭浏览器但是没有记为下线,这个就是我上面提到的 http无状态,这个没招


要想提高精确性就是减少有效期和心跳包的时间设定的结合,这个看你们的需求

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ffggfly
2013-11-14 · TA获得超过353个赞
知道小有建树答主
回答量:663
采纳率:0%
帮助的人:375万
展开全部
用session技术吧
追问
如果用户直接关闭浏览器呢,怎么做,session不能自己销毁吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式