• 在线人数的统计


       统计在线人数,在论坛或聊天软件中用的比较多,无论是在线人数的统计还是网站被访问的总数,在这里我们都要用到Application来保存状态,这点不用多说,在asp.net中我们可以使用全局应用程序Global.asax来实现这些功能,下面是自己简单写的一个实例:

      

    <%@ Application Language="C#" %>

    <script runat="server">

        void Application_Start(object sender, EventArgs e)
        {
            //在应用程序启动时运行的代码
            Application["count"] = 0;
        }
       
        void Application_End(object sender, EventArgs e)
        {
            //在应用程序关闭时运行的代码

        }
           
        void Application_Error(object sender, EventArgs e)
        {
            //在出现未处理的错误时运行的代码

        }

        void Session_Start(object sender, EventArgs e)
        {
            //在新会话启动时运行的代码
            Application.Lock();
           Application["count"]= (Convert.ToInt32(Application["count"])+1).ToString();
            Application.UnLock();
        }

        void Session_End(object sender, EventArgs e)
        {
            //在会话结束时运行的代码。
            // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
            // InProc 时,才会引发 Session_End 事件。如果会话模式
            //设置为 StateServer 或 SQLServer,则不会引发该事件。
            Application.Lock();
            Application["count"] = (Convert.ToInt32(Application["count"]) -1).ToString();
            Application.UnLock();
        }
          
    </script>
    在配置文件中web.config也需要配置以下信息

    <sessionState mode="InProc" timeout="1"></sessionState>

    session的时间设置为1,这样当用户关闭浏览器的时候,也能很快从application中移除

    上面用到了Application.Lock()和Application.UnLock(),主要是为了防止同时多个用户一起访问,这样的话如果不这样处理,就会被当做一个用户来处理,所以要先锁住,一个一个统计;

     

    有时候还要考虑到服务器端点或死机的情况,可以把访问数记录下来,然后读取,在这里就不在多说了,自己慢慢研究吧

    多思考,多创新,才是正道!
  • 相关阅读:
    go1.13 mod 实践和常见问题
    etcd 添加用户,授权特定目录
    golang 你所不知道的 log 和 fmt
    redis 原理系列之--字符串存储的实现原理(1)
    golang 写文件--详细解释
    面向对象范式的核心本质是?---不是继承 不是封装也不是多态
    关于自控力和拖延 的一点分享--《自控力》
    Linux 精确判断是否同一文件--及终端获取字符串md5 的值
    ARM版本及系列
    技术团队塑造
  • 原文地址:https://www.cnblogs.com/shuang121/p/1974852.html
Copyright © 2020-2023  润新知