2014-09-22 35 views
0

我正在创建一个应用程序功能,可以实时查看正在查看特定页面的用户数量。如何使用signalR保持特定页面浏览量的实时计数器?

到目前为止,我所能实现的是我可以计算整个站点的会话数量,这很好,但是我希望能够保持用户数量的计数正在查看特定页面。

我的另一个问题是计数是浏览器会话,这意味着如果我有几个选项卡打开相同的页面,然后计数将增加标签数量。我将如何唯一识别每个用户?

C#:

public class View : Hub 
    { 
     public static int SiteSessionCount; 

     public void ViewerCountChanged(int viewerCount) 
     { 
      Clients.All.viewerCountChanged(viewerCount); 
     } 

     public override Task OnConnected() 
     { 

      Interlocked.Increment(ref SiteSessionCount); 
      ViewerCountChanged(SiteSessionCount); 

      return base.OnConnected(); 
     } 

     public override Task OnDisconnected() 
     { 
      Interlocked.Decrement(ref SiteSessionCount); 
      ViewerCountChanged(SiteSessionCount); 

      return base.OnDisconnected(); 
     } 
    } 

的Javascript:

<script src="/Scripts/jquery.signalR-1.1.4.js"></script> 
     <script src="/signalr/hubs"></script> 
     <script> 

      var hubProxy = $.connection.view; 

      hubProxy.client.viewerCountChanged = function (count) { 
       $("#siteSessionsCount").text(count); 
      }; 

      $.connection.hub.start(); 
     </script> 

回答

0

您需要给用户的唯一标识符发送到SignalR枢纽。这样,即使他/她有多个选项卡打开到浏览器中的某个页面,您也不会将其更新为视图。使用SignalR每次打开一个选项卡并连接到该站点时,它将生成一个唯一的连接ID。它不知道也不关心你在同一页面打开了大约5个标签页。在我看来,您必须允许更新计数,但同时能够过滤出运行多个选项卡的同一用户。

相关问题