【问题标题】:How to get all active users in same page of an application如何在应用程序的同一页面中获取所有活动用户
【发布时间】:2019-12-26 00:00:45
【问题描述】:

我遇到了一个要求,我需要在每个页面中显示有多少活跃用户。我遇到了不同的方法,我不知道在这些场景中使用的最佳实践是什么 以下是我心目中的几个。

 1. SignalR
 2. Portal programing
 3. Is there any way to do this with google analytics. 

应用程序使用 Angular js,每个页面都有相同的 URL 和不同的参数。需要在每个页面显示有多少用户打开了相同的路由(页面)并显示在顶部。

我可以将搜索转移到的任何提示或方向都将非常有帮助。谢谢你

【问题讨论】:

  • SignalR.最简单的。
  • 使用 WebSockets 怎么样?
  • 寻找最佳使用方法,相信这不是同类中的第一个

标签: javascript angular typescript asp.net-web-api signalr


【解决方案1】:

SignalR 是最简单的。每次用户通过 SignalR 连接(加载页面)时,计数器加一,当用户断开连接(离开页面)时,计数器减一。

【讨论】:

  • pusher 怎么样,我读过 pusher 很简单,而且文档更好
【解决方案2】:

您可以使用这些代码计算连接用户总数

首先我需要创建一个 HashSet 来存储连接用户列表

public static class ConnectionList
{
    private static readonly HashSet<string> connectedIds = new HashSet<string>();

    public static HashSet<string> ConnectedIds
    {
        get => connectedIds;
        set => ConnectedIds = value;
    }
}

然后在集线器中我将需要覆盖 2 方法 OnConnectedAsync 和 OnDisconnectedAsync

当用户连接时,我们会将他们的连接 ID 添加到哈希中。如果他们关闭浏览器,我们将从哈希中删除

public class OnlineHub : Hub
    {
        public Task GetTotalAccountConnect()
        {
            return Clients.All.InvokeAsync("TotalClientConnect", ConnectionList.ConnectedIds.Count);
        }

        public override Task OnConnectedAsync()
        {
            ConnectionList.ConnectedIds.Add(Context.ConnectionId);
            return base.OnConnectedAsync();
        }

        public override Task OnDisconnectedAsync(Exception exception)
        {
            ConnectionList.ConnectedIds.Remove(Context.ConnectionId);
            return base.OnDisconnectedAsync(exception);
        }
    }

GetTotalAccountConnect 方法是获取总连接数

【讨论】:

    猜你喜欢
    • 2011-11-13
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 2018-09-28
    相关资源
    最近更新 更多