Горячий счетчик подключений в SignalR Core Group - PullRequest
0 голосов
/ 17 октября 2018

Как узнать количество соединений в конкретной группе SignalR Core?

Примерно так:

this.Clients.Group("Something").Count();

Было бы также хорошо, если бы SendAsync возвратил, сколько клиентов отправилосообщение:

var count = await this.Clients.Client(this.Context.ConnectionId).SendAsync("msg", msg);

Мне нужно это, чтобы определить, пуста ли группа.Данные должны быть правильными, если пользователь принудительно отключается от SignalR Core (отсоедините сетевой кабель) ...

1 Ответ

0 голосов
/ 17 октября 2018

Вы можете использовать события OnConnected и OnDisconnected и сохранять идентификаторы соединения / соединения.

Я использую что-то подобное с дополнительной информацией:

internal static ConcurrentDictionary<string, ConnectionInfos> Users = new ConcurrentDictionary<string, ConnectionInfos>();

public override async Task OnConnectedAsync()
{
    var connId = Context.ConnectionId;
    if (!Users.Keys.Any(x => x == connId))
    {
        Users.TryAdd(connId, new ConnectionInfos { /*...*/});
    }
    await base.OnConnectedAsync();
}

public override async Task OnDisconnectedAsync(Exception exception)
{
    var id = Context.ConnectionId;
    if (Users.TryRemove(id, out ConnectionInfos ci))
    {
        //Connection removed
    }
    await base.OnDisconnectedAsync(exception);
}
...