.net网站统计在线人数问题 我家网站不进入session_end方法,现在客户需要做一个在线统计人数的功能,而且想要精确一点的,有大神能提供一下思路么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 refer here:http://www.cnblogs.com/insus/archive/2013/05/30/3107681.html 应用实例:http://www.cnblogs.com/insus/p/3291322.html最后一个截图。文章最后一个链接http://www.jtxedu.cn/ 什么session_start session_end都是假的 LZ别被骗了..难道我不关浏览器 强制关机 也能触发服务器的session_end吗?别逗了...所以那东西只是初略的统计下,并且实时性不强要想准确,客户端一定要有一个<长连接>.否则别谈什么"精确" 是啊,考虑到用户直接关闭浏览器或者直接拔电源的情况。的确不能做到精确,如果通过socket来做链接判断,用户打开第二个页面的时候又会多一个链接。所以现在很苦恼 :.net网站统计在线人数问题//记录在线人数 <asp:Label ID="lblCount" runat="server"></asp:Label>//显示在线人数 protected void Page_Load(object sender, EventArgs e) { lblCount.Text="您是第" + Application["count"].ToString() + "位访客"; }//触发Session_Start事件调用Global.aspx全局类初始化时间记录来访人数<%@ 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"] = (int)Application["count"] + 1; Application.UnLock(); } void Session_End(object sender, EventArgs e) { //在会话结束时运行的代码。 // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为 // InProc 时,才会引发 Session_End 事件。如果会话模式 //设置为 StateServer 或 SQLServer,则不会引发该事件。 Application.Lock(); Application["count"] = (int)Application["count"] - 1; Application.UnLock(); } </script> .net网站统计在线人数为什么要用Application?用Redis or Memcached啊!使用Application统计在线人数是坑爹中的战斗机。1、Application是非常耗资源的,尤其是访问人数一多的情况下,会爆卡。2、Application在服务器一重启or断电的情况下,是会丢失的为什么用Redis?1、高性能,每秒钟可以读取8100次,写11000次2、高可用,在宕机or服务器重启的情况下,不会影响到统计结果3、支持分布式,可以部署在单独的服务器上面。 还少写了个0,Redis是每秒钟可以读取81000次,写110000次 虽然application是比较常用的方式,但也是非常耗资源的;建议换种方式,几种方式比较一下,再决定用哪种方式; GridView 排序 ASP.NET MVC 运用JQuery 来验证TextArea是否为空! asp.net(c#) menu控件能不能实现鼠标移到上面文字变换? ===求教一个sql语句的写法?=== 用asp.net 2.0实现动态组织结构图,有经验的大虾给点意见。最好有例子。谢谢 在GridView中鼠标单击选择行 请教session存时间做个倒计时的问题 请教entityframework的更新机制 学习.NET,遇到错误请大题帮忙~~ flexigrid跳页时,页面再次刷新。 客服直播间是咋实现的呀?能给个思路吗?
http://www.cnblogs.com/insus/archive/2013/05/30/3107681.html
http://www.cnblogs.com/insus/p/3291322.html
最后一个截图。
文章最后一个链接http://www.jtxedu.cn/
是啊,考虑到用户直接关闭浏览器或者直接拔电源的情况。的确不能做到精确,如果通过socket来做链接判断,用户打开第二个页面的时候又会多一个链接。所以现在很苦恼
//记录在线人数
<asp:Label ID="lblCount" runat="server"></asp:Label>
//显示在线人数
protected void Page_Load(object sender, EventArgs e)
{
lblCount.Text="您是第" + Application["count"].ToString() + "位访客";
}
//触发Session_Start事件调用Global.aspx全局类初始化时间记录来访人数
<%@ 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"] = (int)Application["count"] + 1;
Application.UnLock(); } void Session_End(object sender, EventArgs e)
{
//在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式
//设置为 StateServer 或 SQLServer,则不会引发该事件。
Application.Lock();
Application["count"] = (int)Application["count"] - 1;
Application.UnLock();
}
</script>
1、Application是非常耗资源的,尤其是访问人数一多的情况下,会爆卡。
2、Application在服务器一重启or断电的情况下,是会丢失的
为什么用Redis?
1、高性能,每秒钟可以读取8100次,写11000次
2、高可用,在宕机or服务器重启的情况下,不会影响到统计结果
3、支持分布式,可以部署在单独的服务器上面。
虽然application是比较常用的方式,但也是非常耗资源的;建议换种方式,几种方式比较一下,再决定用哪种方式;