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 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置