ITPub博客

首页 > 应用开发 > Java > java统计当前在线数 (转)

java统计当前在线数 (转)

原创 Java 作者:amyz 时间:2007-11-12 15:21:11 0 删除 编辑
java统计当前在线数 (转)[@more@]

package com.hnedu.stat;
/**
 * 计算在线人数,说明:
 *
 * 在访问页面放入:
 * com.hnedu.stat.OnlineCounter.addUser(object object)
 * 一般用ip来作为object的传入值,当然,如果网站统计登陆在线人数,也可用用户
 * 来作为object传入值。
 *
 * 调用显示在线人数
 * com.hnedu.stat.OnlineCounter.getOnlineCount() *
 *
 * com.hnedu.stat.OnlineCounter.getOnline()
 * 返回一个List,里面以String[]形式存放传入的object值和最后访问页面时间。
 * by crazyren 2003-08-05 eMail: hotmail.com">c_crazyren@hotmail.com
 */
import Java.util.List;
import java.util.ArrayList;
import javax.servlet.http.HttpSession;
public class OnlineCounter {
  private static List list = new ArrayList();

  private OnlineCounter() {
  }
  public static void addUser(Object object) {
  //得到用户当前访问时间
  String nowtime = com.hnedu.util.StringUtils.getTime("mm:ss");
  //Str数组用来存放用户得ip和访问时间
  String[] str = new String[2];
  str[0] = object.toString();
  str[1] = nowtime;

  //temp数组用来临时存放从list里面取出的用户ip和访问时间
  String[] temp = new String[2];

  //循环list
  for (int i = 0; i < list.size(); i++) {
  temp = (String[])list.get(i);
  //如果从list里面取出的用户ip和str里面存放的ip相同,则更新访问时间
  if(temp[0].equals(str[0])) {
  list.set(i,str);
  return;
  }
  //如果用户超过5分钟没有访问,则认为不在线
  if(subTime(nowtime,temp[1]) > 300) {
  list.remove(i);
  }
  }
  //添加一个新的在线用户
  list.add(str);
  //释放资源
  str = null;temp = null;
  }

  public static int getOnlineCount() {
  //返回当前在线人数
  return list.size();
  }

  public static List getOnline() {
  return list;
  }
  /** 计算两个时间差,返回相差秒数 */
  private static int subTime(String src,String des) {
  int n = 0;
  java.util.Calendar ca = java.util.Calendar.getInstance();
  long time1 =
  com.hnedu.util.StringUtils.compareStringTime(src,des,"mm:ss");
  ca.setTimeInMillis(time1);
  n = (ca.get(java.util.Calendar.MINUTE)) * 60;
  n = n + ca.get(java.util.Calendar.SECOND);
  return n;
  }
}

 

引用的StringUtils里面的两个方法:

  /**
  * 获得当前时间
  * @param parrten 输出的时间格式
  * @return 返回时间
  */
  public static String getTime(String parrten)
  {
  String timestr;
  if(parrten==null||parrten.equals(""))
  {
  parrten="yyyyMMddHHmmss";
  }
  java.text.SimpleDateFormat sdf=new SimpleDateFormat(parrten);
  java.util.Date cday=new Date();
  timestr=sdf.format(cday);
  return timestr;
  }

  /**
  * 比较两个字符串时间的大小
  * @param t1 时间1
  * @param t2 时间2
  * @param parrten 时间格式 :yyyy-MM-dd
  * @return 返回long =0相等,>0 t1>t2,<0 t1  */
  public static long compareStringTime(String t1,String t2,String parrten)
  {
  SimpleDateFormat formatter = new SimpleDateFormat (parrten);
  ParsePosition pos = new ParsePosition(0);
  ParsePosition pos1 = new ParsePosition(0);
  Date dt1=formatter.parse(t1,pos);
  Date dt2=formatter.parse(t2,pos1);
  long l=dt1.getTime()-dt2.getTime();
  return l;
  }


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752019/viewspace-981905/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    3984
  • 访问量
    7339022