a.php开始执行的代码头里申请使用资源,结束时释放资源。举个例子:项目组里只有小王一个会美工,现在小张和小米都需要叫小王帮助做一张同级别需求的图。这里,小张先找到小王,小王答应了,小王这个资源就先被小张占了。小米找到小王时,小王则告诉小米,他正在处理小张的需求,让小米等待。
如果你需要处理的同一个客户端的请求,可以使用session或者cookie来做资源管理。
如果是要解决多客户端,因为php没有application的概念,所以需要使用其他的介质,如:缓存文件,数据库,内存缓存方案(memcache、redis等)
你这个问题归根结底是想要做一个实时在线人数的功能:
但是http请求是无状态的,所以你没有办法实时知道多少人在线,就是说没有办法精确响应用户把浏览器关了,服务器就能知道并且把把用户标记为下线
解决办法:
服务器里维护一份列表,这个列表记录了每个用户的session_id,有效期比如可以设置为30分钟,在用户每次请求的时候都刷新下这个有效期,用户点击退出时就删除这个用户的session_id。
因此统计这个列表里未过期的sessionid个数就是当前的实时人数
这份表根据你系统的规模,可以是文本,mysql,也可以是memcache redis 都行
存在问题:
用户只是三十分钟停留在页面但是没有退出的系统把他认为下线了。这个可以通过“心跳包”来解决
用户关闭浏览器但是没有记为下线,这个就是我上面提到的 http无状态,这个没招
要想提高精确性就是减少有效期和心跳包的时间设定的结合,这个看你们的需求
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)