溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java如何統(tǒng)計(jì)當(dāng)前在線數(shù)

發(fā)布時(shí)間:2021-12-30 15:00:44 來源:億速云 閱讀:150 作者:小新 欄目:編程語言

這篇文章主要介紹了java如何統(tǒng)計(jì)當(dāng)前在線數(shù),具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

java統(tǒng)計(jì)當(dāng)前在線數(shù)

package com.hnedu.stat;
/**
 * 計(jì)算在線人數(shù),說明:
 *
 * 在訪問頁面放入:
 * com.hnedu.stat.OnlineCounter.addUser(object object)
 * 一般用ip來作為object的傳入值,當(dāng)然,如果網(wǎng)站統(tǒng)計(jì)登陸在線人數(shù),也可用用戶名
 * 來作為object傳入值。
 *
 * 調(diào)用顯示在線人數(shù)
 * com.hnedu.stat.OnlineCounter.getOnlineCount() *
 *
 * com.hnedu.stat.OnlineCounter.getOnline()
 * 返回一個(gè)List,里面以String[]形式存放傳入的object值和最后訪問頁面時(shí)間。
 * 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) {
  //得到用戶當(dāng)前訪問時(shí)間
  String nowtime = com.hnedu.util.StringUtils.getTime("mm:ss");
  //Str數(shù)組用來存放用戶得ip和訪問時(shí)間
  String[] str = new String[2];
  str[0] = object.toString();
  str[1] = nowtime;

  //temp數(shù)組用來臨時(shí)存放從list里面取出的用戶ip和訪問時(shí)間
  String[] temp = new String[2];

  //循環(huán)list
  for (int i = 0; i < list.size(); i++) {
  temp = (String[])list.get(i);
  //如果從list里面取出的用戶ip和str里面存放的ip相同,則更新訪問時(shí)間
  if(temp[0].equals(str[0])) {
  list.set(i,str);
  return;
  }
  //如果用戶超過5分鐘沒有訪問,則認(rèn)為不在線
  if(subTime(nowtime,temp[1]) > 300) {
  list.remove(i);
  }
  }
  //添加一個(gè)新的在線用戶
  list.add(str);
  //釋放資源
  str = null;temp = null;
  }

  public static int getOnlineCount() {
  //返回當(dāng)前在線人數(shù)
  return list.size();
  }

  public static List getOnline() {
  return list;
  }
  /** 計(jì)算兩個(gè)時(shí)間差,返回相差秒數(shù) */
  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里面的兩個(gè)方法:

  /**
  * 獲得當(dāng)前時(shí)間
  * @param parrten 輸出的時(shí)間格式
  * @return 返回時(shí)間
  */
  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;
  }

  /**
  * 比較兩個(gè)字符串時(shí)間的大小
  * @param t1 時(shí)間1
  * @param t2 時(shí)間2
  * @param parrten 時(shí)間格式 :yyyy-MM-dd
  * @return 返回long =0相等,>0 t1>t2,<0 t1<t2
  */
  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;
  }

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“java如何統(tǒng)計(jì)當(dāng)前在線數(shù)”這篇文章對大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI