windy627850427 2012-03-13 12:46
浏览 644
已采纳

高访问量情况下,在线人数的统计,比如腾讯 ?????????

:) 高访问量情况下,在线人数的统计,比如腾讯 ?????????

  • 写回答

4条回答 默认 最新

  • long13131462101 2012-03-13 12:54
    关注

    [code="java"]java统计在线人数

    对于登录信息时使用session存储的,所以我这里是通过实现HttpSessionAttributeListener这个接口完成的。
      1、实现接口类,在web.xml文件中配置监听类,从而可以使该类完成其工作。
      public class SessionListener implements HttpSessionAttributeListener
      {
      public void attributeAdded(HttpSessionBindingEvent event)
      {
      if (event.getName().equals("userid"))
      {
      try
      {
      OnlineCounter.doUser(event.getValue(),false);
      } catch (Exception e)
      {
      e.printStackTrace();
      }
      }
      }
      public void attributeRemoved(HttpSessionBindingEvent event)
      {
      if (event.getName().equals("userid"))
      {
      try
      {
      OnlineCounter.doUser(event.getValue(),true);
      } catch (Exception e)
      {
      e.printStackTrace();
      }
      }
      }
      public void attributeReplaced(HttpSessionBindingEvent event)
      {
      }
      }
      2、要做的就是实现任务类OnlineCounter了
      public class OnlineCounter
      {
      private static List list = new ArrayList();
      private static List list1 = new ArrayList();
      private OnlineCounter() {
      }
      // 统计当前在线会员人数
      public static void doUser(Object object,boolean bl) {
      //得到用户当前访问时间
      String nowtime = getTime("mm:ss");
      //Str数组用来存放用户的id和访问时间
      String[] str = new String;
      str[0] = object.toString();
      str[1] = nowtime;
      //temp数组用来临时存放从list里面取出的用户的id和访问时间
      String[] temp = new String;
      //循环list
      for (int i = 0; i < list.size(); i++) {
      temp = (String[])list.get(i);
      //如果从list里面取出的用户ip和str里面存放的id相同,则更新访问时间
      if(bl==false && temp[0].equals(str[0])) {
      list.set(i,str);
      return;
      }
      //如果监听类中穿过来bl==true,则认为不在线
      if(bl==true && temp[0].equals(str[0]))
      {
      list.remove(i);
      }
      }
      //添加一个新的在线用户
      if(bl==false)
      list.add(str);
      //释放资源
      str = null;temp = null;
      }
      //统计网站所有在线人数
      public static void allUser(Object object) {
      //得到用户当前访问时间
      String nowtime = getTime("mm:ss");
      //Str数组用来存放用户得ip和访问时间
      String[] str = new String;
      str[0] = object.toString();
      str[1] = nowtime;
      //temp数组用来临时存放从list里面取出的用户ip和访问时间
      String[] temp = new String;
      //循环list
      for (int i = 0; i < list1.size(); i++) {
      temp = (String[])list1.get(i);
      //如果从list里面取出的用户ip和str里面存放的ip相同,则更新访问时间
      if( temp[0].equals(str[0])) {
      list1.set(i,str);
      return;
      }

    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R
  • ¥15 在线请求openmv与pixhawk 实现实时目标跟踪的具体通讯方法
  • ¥15 八路抢答器设计出现故障
  • ¥15 opencv 无法读取视频