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

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

[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]

大型互联网,无法根据session来取,分布式系统,像这种对实时性要求不高的数据,大多放在缓存里,或者分析日志中得出

1+1=2,有什么难的啊。。来一个加一个,走一个减一个嘛

那个高级的是白痴,给的代码更白痴。。