免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: zagorot
打印 上一主题 下一主题

[性能] php写的B/S应用系统中如何限制系统用户数? [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
1 [报告]
发表于 2005-12-01 16:05 |显示全部楼层
dualface说得和我想的差不多,就是在session上做文章,关键是精确的寻找到哪些session记录是有效的,并且及时的清除无效的session记录
session的清理是根据session.gc_divisor设置调用session清理函数的几率,所以这个值应该设置得尽量小,甚至可以考虑设置为1
session的生存时间也要设置的短点,否则容易被僵尸把位置长期霸占
session记录可以考虑放到sqlite或者bdb这种文件型数据库内

>例如卖给用户的是 30 用户版,那我系统实际上可以容纳 33 人在线,就大大降低出问题的几率了
如dualface所说的,实际可以使用的用户数应该稍微高一点,因为session这东西终归感觉无法精确的控制,稍微调高一点点,出问题的几率会低一些

纸上谈兵终归是纸上谈兵,楼主如果觉得这个方向可行的话,不妨自己写来看看,反正也不复杂

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-12-01 16:19 |显示全部楼层
原帖由 北京野狼 于 2005-12-1 16:04 发表



您的钻研精神确实很令人钦佩,比无聊的人强得多。

老实说,没时间全看完你的新方案。和早上那个方案是根本性的改变,

这次有些可行性。但是实现起来估计比LZ的系统本身都麻烦。

其实一直都没有真正 ...


我觉得不复杂啊,其实就是做两个东西
一个是自定义session的存储,就是session_set_save_handler(),这个东西稍微有点php开发经验的人都可以写
第二个是检查有效的session个数,按照session生存时间排一下序,找出超标的那几个session id,如果当前的用户的session id正好在其中的话,输出错误信息,我想这个也不会太难,这个功能可以封装成一个函数

至于在程序的什么地方调用这个函数,要看程序的具体结构而言了,和这个函数本身没有太大关系

当然要做到精确的控制在线用户恐怕是有点难的,所以刚才也在建议把实际的用户数稍微设高一点
总之,希望可以达到80%的效果就不错了,毕竟http是无状态协议,从根基上就有问题。

从使用者的角度来说,假定进入系统进行某些操作,需要5分钟的时间,但是只要我们能够把误差时间控制在5分钟之内,目的就达到了,就算没有100%的精确也无所谓。
这个要看楼主的系统具体是什么功能了,从控制使用人数的角度来推算,很可能是OA一类需要长时间使用的系统。

[ 本帖最后由 夜猫子 于 2005-12-1 16:20 编辑 ]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2005-12-01 17:06 |显示全部楼层
我其实是看dualface老大这么来劲,也凑凑热闹的
由于楼主的情况是环境不受控,这个方法可能还有问题,总之可以试试看,关键是要对session的具体机制非常熟悉
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP