2014-09-22 64 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個標籤頁。在我看來,您必須允許更新計數,但同時能夠過濾出運行多個選項卡的同一用戶。

相關問題