我正在创建一个应用程序功能,它可以实时查看正在查看特定页面的用户数。
到目前为止,我能够实现的是,我可以计算整个网站的会话数量,这很好,但我希望能够保持用户数量的计数正在查看特定页面。
我遇到的另一个问题是计数是浏览器会话,这意味着如果我有几个标签打开同一页面,那么计数将增加标签的数量。我如何才能唯一地识别每个用户?
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 :(得分:0)
您需要向SignalR Hub发送用户的唯一标识符。这样,即使他/她在浏览器中有多个标签打开到某个页面,您也不会将其更新为视图。使用SignalR,每次打开选项卡并连接到站点时,它将生成唯一的连接ID。它不知道或不关心你有5个标签打开同一页面。在我看来,你必须允许更新计数,但同时能够过滤掉运行多个标签的同一用户。