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

來源:互聯網
上載者:User

標籤:

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

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

 

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

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

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);
  }

 

商務邏輯層

 public class sysOpenLogBLL {

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

  /// <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 資料庫中添加一個作業,定時刪除垃圾資料。

 

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.