今天开发一个设计一个统计在线人数的统计。实现方式是在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 统计在线人数功能实现的更多相关文章

  1. PHP实现统计在线人数功能示例

    本文实例讲述了PHP实现统计在线人数的方法.分享给大家供大家参考,具体如下: 我记得ASP里面统计在线人数用application 这个对象就可以了.PHP怎么设计? PHP对session对象的封装 ...

  2. PHP 实现精确统计在线人数功能

    有需要学习交流的友人请加入交流群的咱们一起,有问题一起交流,一起进步!前提是你是学技术的.感谢阅读! 点此加入该群​jq.qq.com PHP对session对象的封装的很好,根据HTTP协议,每个范 ...

  3. kindeditor-4.1.10 结合 Asp.Net MVC 添加图片功能

    KindEditor是一套开源的HTML可视化编辑器,现在我要结合Asp.Net MVC4 上传图片功能,做相应的配置和修改, 其实网上也有人写过类似的文章了,我写出来是以防以后使用的时候出现这样的问 ...

  4. ASP.NET MVC 3:缓存功能的设计问题

    今天这一篇文章我来谈一谈在MVC 3项目中的缓存功能,以及针对缓存的一些设计上的考量,给大家参考参考. 为什么需要讨论缓存?缓存是一个中大型系统所必须考虑的问题.为了避免每次请求都去访问后台的资源(例 ...

  5. asp.net mvc 简单搜索功能

    View中代码: <input type="text" class="searchText" id="searchText"/> ...

  6. 转 ---- Asp.net mvc项目分页功能

    1.定义一个分页用的Page<T>类 1 /* 使用示例: 2 var pager = new Pager<Article>( 3 this.ControllerContext ...

  7. Asp.net mvc项目分页功能

    1.定义一个分页用的Page<T>类 /* 使用示例: var pager = new Pager<Article>( this.ControllerContext, //上下 ...

  8. Application 统计在线人数

    MVC 统计在线人数: protected void Application_Start() { Application[; AreaRegistration.RegisterAllAreas(); ...

  9. ASP.NET没有魔法——ASP.NET MVC 过滤器(Filter)

    上一篇文章介绍了使用Authorize特性实现了ASP.NET MVC中针对Controller或者Action的授权功能,实际上这个特性是MVC功能的一部分,被称为过滤器(Filter),它是一种面 ...

随机推荐

  1. Sql求和异常——对象不能从 DBNull 转换为其他类型

    做项目遇到一个以前没遇到的问题,就是要计算一个用户消费总额, 关键代码如下: string sql = "select sum(Tmoney) from [order] where uid= ...

  2. stuff函数(转)

    在上篇博文中提到了stuff函数 在这篇博文中对stuff函数进行了详解 本片博文系转载,但对原文顺序做了下调整 示例 以下示例在第一个字符串 abcdef 中删除从第 2 个位置(字符 b)开始的三 ...

  3. 不同的子序列 · Distinct Subsequences

    [抄题]: 给出字符串S和字符串T,计算S的不同的子序列中T出现的个数. 子序列字符串是原始字符串通过删除一些(或零个)产生的一个新的字符串,并且对剩下的字符的相对位置没有影响.(比如,“ACE”是“ ...

  4. springmvc使用list集合实现商品列表的批量修改

    1将表单的数据绑定到List 1.1 需求 实现商品数据的批量修改. 1.2 需求分析 要想实现商品数据的批量修改,需要在商品列表中可以对商品信息进行修改,饼干且可以批量提交修改后的商品数据. 1.3 ...

  5. NOIP 2016 游记

  6. [SoapUI] 配置默认环境的properties

    <Envs> <Env id="Live,Default environment"> <Project> <CusProperty nam ...

  7. Jmeter Ant Task如何让beanshell断言失败的详细信息展示在report里面

    首先必须给beanshell断言添加FailureMessage if(${TotalClient_SS}+2!=${TotalClient_SS2}){Failure=true;       Fai ...

  8. linux磁盘管理(RHEL)

    IDE硬盘名称格式为/dev/hdXY,其中X为a-z的小写字母,Y为数字1-4(一块硬盘最多能分4个主分区).如hda1,表示第一块硬盘的第一个分区.hdb3表示第二块硬盘的第三个分区.还有如Pri ...

  9. 用个体软件过程(PSP)记录你的工作

    用个体软件过程(PSP)记录你的工作 首先,非常感谢大家对本门课程的学习所投入的时间和精力. 其次,已经进入数据时代,口说无凭,拿数据来.如果你认为你已经投入了大量精力在这门课程的学习和作业中,而且已 ...

  10. 2018.10.14 loj#516. DP 一般看规律(启发式合并)

    传送门 注意到一种颜色改了之后就不能改回去了. 因此可以启发式合并. 每次把小的合并给大的. 这样每个数最多被合并logloglog次. 如果维护一棵比较下标的平衡树的话,对于答案有贡献的就是每个数与 ...