asp.net MVC 統計在線人數功能實現

今天開發一個設計一個統計在線人數的統計。實現方式是在MVC 中,用戶次執行一個Action請求完成後,向數據表中插入一條用戶心跳記錄,統計在線人數則是根據該記錄,30分鐘內有記錄的用戶則爲在線狀態。html

首先設計表心跳記錄表結構MOdelsql

 

接下來添加 CheckACAttribute 類繼承 ActionFilterAttribute基類,並在FilterConfig類中註冊。數據庫

public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
       filters.Add(new ASSFramework.Web.Common.CheckACAttribute());
        }
    }app

CheckACAttribute類的攔截器方法實現以下框架

  public override void OnActionExecuted(ActionExecutedContext filterContext) {
   if (isInsertOpenLog == true) {  //判斷是否寫入心跳記錄
    //每個action 執行後記錄一下操做日誌,用於統計用戶在線。
    ASSFramework.Services.BLL.sysOpenLogBLL bll = new ASSFramework.Services.BLL.sysOpenLogBLL();
    BaseController baseController = (BaseController)filterContext.Controller;
    sysOpenLog model = new sysOpenLog();
    model.userID = baseController.GetSysUser().userID;      //獲取用戶ID
    model.userNameCn = baseController.GetSysUser().userNameCn;  //用戶名稱
    model.createdDate = DateTime.Now;
    model.flag = 1;
    bll.Insert(model);
   }
   base.OnActionExecuted(filterContext);
  }ide

 

業務邏輯層spa

 public class sysOpenLogBLL {設計

  DAL.sysOpenLogDAL dal = new DAL.sysOpenLogDAL();3d

  /// <summary>   日誌

  /// 統計在線人數  

 /// </summary>   

/// <returns></returns>  

   public IList<Hashtable> GetOnLinelList() {    

    return dal.GetOnLinelList();   

   }

}

 

數據訪問層,數據訪問使用到的是IBatisNet框架,該框架輕小靈活,第一次使用就深深的喜歡上了。

 public class sysOpenLogDAL {
  /// <summary>
  /// 統計在線人數
  /// </summary>
  /// <returns></returns>
  public IList<Hashtable> GetOnLinelList() {
   string stmtId = "sysOpenLog.GetOnLinelList";
   return ASSMapper.Instance().QueryForList<Hashtable>(stmtId, "");
  }

表映射xml文件以下

 

<statements>    

<!--統計在線人數,近半個小時有活動的用戶-->    

  <select id="GetOnLinelList" parameterClass="map" resultClass="Hashtable">   

    select userID,userNameCn,MAX(createdDate)

    from sysOpenLog   

    group by userID,userNameCn   

    having MAX(createdDate) >= DATEADD(MINUTE,-30,GETDATE())  

</select>

   <!--添加-->  

  <insert id="Insert" parameterClass="sysOpenLog" resultClass="Int32">   

    Insert into sysOpenLog(   userID,   userNameCn,   createdDate,   flag   )values(   #userID#,   #userNameCn#,   #createdDate#,   #flag#   )         SELECT @@IDENTITY  

  </insert>  

</statements>

 

基礎數據經過action 請求後寫入心跳記錄表,接下來就要展現出來在線人數信息

在控制器中添加  Index()

 public ActionResult Index()
        {
       ASSFramework.Services.BLL.sysOpenLogBLL bll = new Services.BLL.sysOpenLogBLL();
       IList<Hashtable> model = bll.GetOnLinelList();
       return View(model);
        }

添加Idex視圖頁面

@{  

  Layout = "~/Views/Shared/_Layout.cshtml";

}

@using System.Collections;

@using ASSFramework.Models;

@model IList<Hashtable>

 <!--導航-->  

@Html.place("首頁;用戶管理;在線統計")

<div class="formbody">  

  <div class="formtitle"><span>在線人數</span></div>  

    <div class="toolsli">   

      <ul class="toollist">   

      @foreach (var item in Model) {      

        <li><a><img src="~/Content/theme/images/i07.png" /></a><h2>@item["userNameCn"] </h2></li>   

      }   

      </ul>    

  </div>

</div>

 

最終顯示結果以下

 

 

 

 

此次只貼出來了大體的實現思路和簡單的代碼貼圖。

 

統計在線人數的功能基本實現了,可是這時要考慮到這心跳記錄表若是用戶量多,並且操做頻繁的話,數據量會愈來愈大,這裏咱們只須要統計半小時之內的用戶活動記錄,因此在sql server 數據庫中添加一個做業,定時刪除垃圾數據。

相關文章
相關標籤/搜索