构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(40)-精准在线人数统计实现-【过滤器+Cache】

简介: 原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(40)-精准在线人数统计实现-【过滤器+Cache】系列目录 上次的探讨没有任何结果,我浏览了大量的文章和个别系统的参考!决定用Cache来做,这可能有点难以接受但是配合mvc过滤器来做效果非常好! ...
原文: 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(40)-精准在线人数统计实现-【过滤器+Cache】

系列目录

上次的探讨没有任何结果,我浏览了大量的文章和个别系统的参考!决定用Cache来做,这可能有点难以接受但是配合mvc过滤器来做效果非常好!

由于之前的过滤器我们用过了OnActionExecuting这个方法来判断权限

现在在方法被执行后我们用OnActionExecuted来监听用户的操作和刷新用户在线列表

首先下载http://files.cnblogs.com/ymnets/OnlineUser.7z这个类库,代码清晰,并加注释

这个类库包括了操作在线用户列表的增删方法,大家可以下载下来看并放到

可以打开研究其代码!

在App.Admin新建类OnlineHttpModule

using App.Core.OnlineStat;
using App.Models.Sys;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web;
using System.Web.Routing;

namespace App.Admin
{

    public class OnlineHttpModule
    {
        // 缓存键
        public static readonly string g_onlineUserRecorderCacheKey = "__OnlineUserRecorder";
        #region IHttpHandler 成员
    public static void ProcessRequest()
        {
            // 获取在线用户记录器
            OnlineUserRecorder recorder = HttpContext.Current.Cache[g_onlineUserRecorderCacheKey] as OnlineUserRecorder;

            if (recorder == null)
            {
                // 创建记录器工厂
                OnlineUserRecorderFactory factory = new OnlineUserRecorderFactory();

                // 设置用户超时时间
                factory.UserTimeOutMinute = 2;
                // 统计时间间隔
                factory.StatisticEventInterval = 20;

                // 创建记录器
                recorder = factory.Create();

                // 缓存记录器
                HttpContext.Current.Cache.Insert(g_onlineUserRecorderCacheKey, recorder);
            }

            OnlineUser user = new OnlineUser();


            AccountModel model = (AccountModel)HttpContext.Current.Session["Account"];//注意session的名称是和登录保存的名称一致
            // 用户名称
            user.UserName = Convert.ToString(model.Id);
            // SessionID
            user.SessionID = HttpContext.Current.Session.SessionID;
            // IP 地址
            user.ClientIP = HttpContext.Current.Request.UserHostAddress;
            // 最后活动时间
            user.ActiveTime = DateTime.Now;
            // 最后请求地址
            user.RequestURL = HttpContext.Current.Request.RawUrl;

            // 保存用户信息
            recorder.Persist(user);
        }
        #endregion
    }
}

 

这个类在用户登录时被调用和在过滤器被调用,调用代码

过滤器:

   public class SupportFilterAttribute : ActionFilterAttribute
    {
        public string ActionName { get; set; }
        private string Area;
        // 方法被执行后的更新在线用户列表
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            OnlineHttpModule.ProcessRequest();

        }
......................................

登录时候的设置:

 AccountModel account = new AccountModel();
            account.Id = user.Id;
            account.TrueName = user.TrueName;
            account.Photo = string.IsNullOrEmpty(user.Photo)?"/Images/Photo.jpg":user.Photo;
            Session["Account"] = account;
            //在线用户统计
            OnlineHttpModule.ProcessRequest();

调用非常简单,实现非常简单!

现在看看如果获取在线列表:

            // 绑定在线用户列表
            IList<OnlineUser> userList = recorder.GetUserList();

            foreach (var OnlineUser in userList)
            {
                sb.AppendFormat(OnlineUser.UserName+"<br>");
            }

OnlineHttpModule可以自由设置统计的间隔(秒),和用户超时的时间,这很精准的统计了用户2分钟无操作被视为离线!

我分别用IE和chome测试了2个用户,同时也关闭浏览器测试用户,准确性也不错!抛弃了不准确的原始老方法

目录
相关文章
|
3月前
|
前端开发 Java 开发者
Spring MVC:构建高效、可维护、可扩展的Web应用程序
Spring MVC:构建高效、可维护、可扩展的Web应用程序
27 0
|
7月前
|
XML 前端开发 安全
构建自己的MVC框架(Ruby语言实现)-- 2. 创建ApplicationController
构建自己的MVC框架(Ruby语言实现)-- 2. 创建ApplicationController
|
7月前
|
前端开发 关系型数据库 开发工具
构建自己的MVC框架(Ruby语言实现)-- 开篇
构建自己的MVC框架(Ruby语言实现)-- 开篇
|
5月前
|
设计模式 存储 前端开发
介绍Spring MVC框架,以及如何使用它构建Web应用程序。
Spring MVC 是一个用于构建 Java Web 应用程序的强大框架。它基于经典的 MVC(Model-View-Controller)设计模式,提供了一种结构化的方法来开发可维护和可扩展的 Web 应用程序。在这篇文章中,我们将深入介绍 Spring MVC 框架,包括其核心概念、工作原理以及如何使用它构建 Web 应用程序。
|
6月前
|
JSON 前端开发 Java
构建健壮的Spring MVC应用:JSON响应与异常处理
构建健壮的Spring MVC应用:JSON响应与异常处理
35 0
|
6月前
|
存储 设计模式 前端开发
“深入理解自定义MVC:构建灵活可定制的Java应用程序”
“深入理解自定义MVC:构建灵活可定制的Java应用程序”
23 0
|
3月前
|
存储 开发框架 前端开发
MVVM 模式与 MVC 模式:构建高效应用的选择
MVVM 模式与 MVC 模式:构建高效应用的选择
MVVM 模式与 MVC 模式:构建高效应用的选择
|
8月前
|
图形学 异构计算 Windows
[性能]-如何在Unity种统计一帧内的开销
[性能]-如何在Unity种统计一帧内的开销
|
5月前
|
存储 前端开发 Java
Java Web框架,如Spring MVC,是一种用于构建Web应用程序的软件框架:学生考试Web应用程序
Java Web框架,如Spring MVC,是一种用于构建Web应用程序的软件框架。它们提供了一种结构化的方法,用于处理Web请求、生成动态内容和管理Web应用程序的组件。以下是关于Java Web框架和Spring MVC的详细解释,以及如何使用Spring MVC创建一个简单的Web应用程序的示例代码。
|
6月前
|
前端开发 Java 数据库连接
“构建高级自定义MVC框架实现CRUD功能的完整指南“
“构建高级自定义MVC框架实现CRUD功能的完整指南“
25 0

相关实验场景

更多