很多时候需要做网站的在线人数统计,由其是社交网站,有了在线人数统计会给用户更好的体验,以下是我的思路,在这里写出来,只有一个目的,获得更好的解决思路我是利用数据库来完成这个功能,想要达到最快的速度,我就直接使用MYSQL内存表来保存在线会员的记录,
1:当会员登录时(包含自动登录),便去查找该会员是否存在于内存表当中,如果存在,则更新在线表当中的时间,如果不存在,则插入相应数据到内存表当中去2:在用户退出时,我没有进行办法实时的更新,因为用户有可能直接关闭网页离开,对于这种,我无能为力,所以我只能根据时间段来解决这个问题,我写一个计划任务,每个半个小时,执行一次该程序,该程序主要的作用是扫描当前在线表当中,更新时间是否有小于当前时间10分钟或者多少分钟(这个根据具体情况自定义)的,如果有,则直接删除该条记录,这样便保证了,大概的在线人数的统计
我在这里只是抛砖引玉,所以就这个问题希望各位能说出自己的见解...........

解决方案 »

  1.   

    在线人数用application 全局变量 就可以了吧,还要搞个数据库
      

  2.   

    php根本就没有长驻内存的东西,哪有application。LZ说的就是现在大多数人的解决方案,不过LZ你也可以把在线信息放到memcache里,在memcache里设置超时时间就行了,这样也相当于apsx的application。可以减轻数据库的负担。
      

  3.   


    谢谢你的回答,之前有考虑过用这个,但担心一个问题就是memcache在单机上的性能到底咋样,没有测试过........
      

  4.   

    关闭网页在session没有过期时候也算是在线用户啊,我认为直接计算当前的session总和就行啦,和用户登录状态保持一致,至于session你存数据库或是memcache里都行啊
      

  5.   

    其实我现在又想到一种方法就是在SESSION上做文章,因为SESSION都有一个SESSIONID,一般是保存在COOKIE里面的,如果是自己有权限修改服务设置这就根本不是什么问题了,保存在COOKIE里面你便可以设置它的过期时间,至于它的更新时间和这篇贴子原理一样,只是现在操作的是纯粹的SESSION了,呵呵,如果真要到了一定的时候,倒还可以考虑直接使用session_set_save_handler来接管SESSION所有操作了,这样也就可以更好的监控了
      

  6.   

    PHP的SESSION默认是使用文件存储的,也可以设置直接存储在数据库中。或者干脆你存在一个你自定义的文件中,也是可以做到的。存取文件的确也可以减轻数据库的负担。不过不知你的网站用户数量会有多少,当SESSION文件数量到达一定级数,同一目录下文件存取速度也会很慢。当然它还支持多级目录存储,可以减轻这个问题。SESSION其实也可以做到分布式多服务器存储。把SESSION目录放到一台或多台服务器上,使用SMB协议让多台服务器通过固定的hash键值对来访问达到相应服务器上的SESSION文件。但IO速度毕竟还是比不上内存的读写速度。memcache可是直接操作内存的,所以memcache是最佳选择。不用考虑了,memcache绝对比SESSION更快。而且memcache支持分布式更方便,php下连接memcache服务器时可以直接指定服务器。
      

  7.   

    MYSQL内存表,人多了,表会爆炸的。
      

  8.   

    你看那个phpwind 就有统计在线会员 和非会员.
      

  9.   

    我支持 ShadowSniper 的看法...