asp.net mvc谁在线

nia*_*iao 9 asp.net-mvc

问候,有人可以给我一些建议或链接,以帮助我实现以下方案.页面将用asp.net mvc编写.授权将由会员实施.方案如下:

User1刚刚登录.过了一会儿,User2尝试登录成功.然后,应通知user1 User2刚刚登录.此外,应通知User2 User1已联机.

我怎样才能实现这样的目标?这些用户也应该可以相互写消息.(像聊天一样).

Fre*_*eau 6

有一些方法可以在asp.net成员资格提供程序中执行此操作,特别是IsUserOnline()和类似CountUsersOnline()的方法.这些方法唯一的问题是它们真的很蹩脚.它们依赖于成员资格提供程序的LastActivityDate()和您可以在web.config中设置的窗口.换句话说,如果用户最后一次遇到成员资格提供者加上web.config中的时间窗口未到期,则认为该用户在线.

我们通过设置Comet服务器并每隔十分钟ping一次Web服务器,使用了这个scenairo并使其工作.当ping服务器时,它会更新成员资格提供程序的LastActivityDate.

我们将活动窗口设置为12分钟,以及会话计时器.这使我们能够确定谁在线到达大约十分钟的准确度.


这是Web.config中的行:

    <membership userIsOnlineTimeWindow="12">
Run Code Online (Sandbox Code Playgroud)

这是jQuery Comet服务器:

  function getData() { 
    $.getJSON("/Account/Timer", gotData); 
  } 

  // Whenever a query stops, start a new one.    
  $(document).ajaxStop(getData, 600000);

  // Start the first query.
  getData(); 
Run Code Online (Sandbox Code Playgroud)

这是我们的服务器代码:

    public JsonResult Timer()
    {
            MembershipUser user = Membership.GetUser(User.Name);
            user.LastActivityDate = DateTime.Now;

            Membership.UpdateUser(user);

            // You can return anything to reset the timer.
            return Json(new { Timer = "reset" }, JsonRequestBehavior.AllowGet);
    }
Run Code Online (Sandbox Code Playgroud)