php做一个排队等候的功能
为了防止并发数过大,做一个限制,假如限定同时访问的人数不能超过10人,超过10人,就返回等候的页面,请问大神们怎么做。用户进来的时候怎样保存并判断是否超过限定人数,退出或...
为了防止并发数过大,做一个限制,假如限定同时访问的人数不能超过10人,超过10人,就返回等候的页面,请问大神们怎么做。
用户进来的时候怎样保存并判断是否超过限定人数,退出或者直接把浏览器关闭了,怎样把这个空缺填补上。 展开
用户进来的时候怎样保存并判断是否超过限定人数,退出或者直接把浏览器关闭了,怎样把这个空缺填补上。 展开
2个回答
展开全部
你这个问题归根结底是想要做一个实时在线人数的功能:
但是http请求是无状态的,所以你没有办法实时知道多少人在线,就是说没有办法精确响应用户把浏览器关了,服务器就能知道并且把把用户标记为下线
解决办法:
服务器里维护一份列表,这个列表记录了每个用户的session_id,有效期比如可以设置为30分钟,在用户每次请求的时候都刷新下这个有效期,用户点击退出时就删除这个用户的session_id。
因此统计这个列表里未过期的sessionid个数就是当前的实时人数
这份表根据你系统的规模,可以是文本,mysql,也可以是memcache redis 都行
存在问题:
用户只是三十分钟停留在页面但是没有退出的系统把他认为下线了。这个可以通过“心跳包”来解决
用户关闭浏览器但是没有记为下线,这个就是我上面提到的 http无状态,这个没招
要想提高精确性就是减少有效期和心跳包的时间设定的结合,这个看你们的需求
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用session技术吧
追问
如果用户直接关闭浏览器呢,怎么做,session不能自己销毁吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询