日期:2014-05-17  浏览次数:20482 次

c#软件如何统计在线人数?
我想通过webservice来统计软件的使用情况,当启动软件时向服务器的用户表写开始使用时间,正常退出时写一个结束使用时间,来统计用户的在线使用情况。

但是有一个问题:用户可能不会正常退出,比如电脑断电了,或是直接从进程里面结束... ... 当这种情况下这个结束使用时间怎么获取呢,很纠结。
各位高手们,有木有好的办法呢????
等待中... ...

------解决方案--------------------
只要有一个人响应就可以,响应后会返回在指定时间有响应的人员
------解决方案--------------------
写在Global.asax全局文件中 
void Application_Start(object sender, EventArgs e) 
{
// 在应用程序启动时运行的代码
Application.Add("online", 0);
}
void Session_Start(object sender, EventArgs e) 
{
// 在新会话启动时运行的代码
Application.Lock();
Application["online"] = (int)Application["online"] + 1;
Application.UnLock();
}
 void Session_End(object sender, EventArgs e) 
{
// 在会话结束时运行的代码。 
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer 
// 或 SQLServer,则不会引发该事件。
Application.Lock();
Application["online"] = (int)Application["online"] - 1;
Application.UnLock();
}
记住在线人数永远都不可能是个精确的值因为它要受时间和性能的约束
------解决方案--------------------
给你一个我曾经做过的思路,我以前做的一个播放器,就可以统计1分钟内使用者的数量,具体做法是这样:
客户端启动以后,查找机器硬件标识(我做的是网卡mac+硬盘id+CPU id)组合起来生成一串代号,基本上可以确定是唯一的了。软件把这个机器代号发送到服务器段,服务器端接收后,查找对比数据库,如果存在,则更新它的在线时间为当前时间,如果不存在,则存入数据也更新时间为当前时间。客户端每隔2分钟就执行一次发送操作,目的就是让服务器定时更改它的在线时间。服务器统计的时候只需要计算当前时间和需要统计时间内在线的机器数量即可。比如要统计3分钟使用人数,那么就查找当前时间往前3分钟内在线的机器就行了,如果客户端关机,或者关闭了软件,那么它的在线状态的时间就不能更新了,超过后就自然不会统计它了,就可以判定它已经离线。
------解决方案--------------------
这个很ok
------解决方案--------------------
探讨
写在Global.asax全局文件中
void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
Application.Add("online", 0);
}
void Session_Start(object sender, EventArgs e)
{
// ……

------解决方案--------------------
探讨
给你一个我曾经做过的思路,我以前做的一个播放器,就可以统计1分钟内使用者的数量,具体做法是这样:
客户端启动以后,查找机器硬件标识(我做的是网卡mac+硬盘id+CPU id)组合起来生成一串代号,基本上可以确定是唯一的了。软件把这个机器代号发送到服务器段,服务器端接收后,查找对比数据库,如果存在,则更新它的在线时间为当前时间,如果不存在,则存入数据也更新时间为当前时间。客户端每隔2分钟就执行一……

------解决方案--------------------
探讨

这个很ok

------解决方案--------------------
探讨
给你一个我曾经做过的思路,我以前做的一个播放器,就可以统计1分钟内使用者的数量,具体做法是这样:
客户端启动以后,查找机器硬件标识(我做的是网卡mac+硬盘id+CPU id)组合起来生成一串代号,基本上可以确定是唯一的了。软件把这个机器代号发送到服务器段,服务器端接收后,查找对比数据库,如果存在,则更新它的在线时间为当前时间,如果不存在,则存入数据也更新时间为当前时间。客户端每隔2分钟就执行一……

------解决方案--------------------
在Global.ascx文件的Session_Start事件中添加如下代码

C# code

Application.Lock(); 
Application[ "user_sessions "] = (int)Application[ "user_sessions "] + 1; 
Application.Unlock();

------解决方案--------------------
大家看好了,楼主说的是桌面应用软件,不是网站,而楼主需要统计一下软件使用情况,就正如QQ音乐的在线,pps的在线一样。其实要精确就还就是不停的发送数据来更改在线时间这个办法比较好。对服务器压力也不大,当然你要说假如有100万人,1000万人同时使用那就不一样了,呵呵。


------解决方案--------------------
探讨
看来只好用定时发送信息到服务器,更新这个mac地址用户的最后使用时间了。

------解决方案--------------------