在线人数的统计

   统计在线人数,在论坛或聊天软件中用的比较多,无论是在线人数的统计还是网站被访问的总数,在这里我们都要用到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(),主要是为了防止同时多个用户一起访问,这样的话如果不这样处理,就会被当做一个用户来处理,所以要先锁住,一个一个统计;

 

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

多思考,多创新,才是正道!
原文地址:https://www.cnblogs.com/shuang121/p/1974852.html