关于检测用户在线状态的问题。
我现有一项目需要比较精确的检测用户的在线状态。
现在我有二个方案,
方案一,定时刷新。
这是比较传统的方法,不管是用框架还是xmlhttp每隔3-5秒刷新一次。
方案二,永久连接。
这个方案中,设定某页面保持与客户连接,代码大致如下:
Server.ScriptTimeout = Int16.MaxValue; //最大响应时长
Response.Cache.SetCacheability(HttpCacheability.NoCache);//不在客户机缓存
Response.BufferOutput = false; //不缓冲,直接发出
while(Response.IsClientConnected) //检查客户是否保持连接
{
System.Threading.Thread.Sleep(5000); //挂起线程 3-5 秒
/****处理代码****/
}
注意:方案一中每次刷新都需要更新一次在线状态表(数据库或Application),而方案二中只需在访客登录和登出时各更新一次状态表(数据库或Application)。
数据库:MsSql2005
Asp.Net版本:2.0
现在的问题是:间隔时长不能超过5秒。在多人在线的情况下,哪种方式更好?哪种服务器负荷更小?
欢迎大家在此讨论。也可以给出其它方案。谢谢!