signalr - 热门获取 SignalR 核心组中的连接数
问题描述
如何获取特定 SignalR Core 组中的连接数?
像这样的东西:
this.Clients.Group("Something").Count();
SendAsync
如果返回有多少客户端发送消息也会很好:
var count = await this.Clients.Client(this.Context.ConnectionId).SendAsync("msg", msg);
我需要这个来确定组是否为空。如果用户用力从 SignalR Core 断开连接(拔下网线),数据应该是正确的......
解决方案
您可以使用 OnConnected 和 OnDisconnected 事件并保存连接/connectionIds。
我使用类似这样的附加信息:
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);
}
推荐阅读
- c# - 如何在所有条目都填满之前禁用按钮?
- c++ - 将 24 位“.bmp”图像转换为黑白/单色图像的可能算法是什么?
- c# - google oAuth 尝试重定向到与我的应用程序 url 不同的随机 uri
- javascript - 为什么按引用传递似乎在这段代码中不起作用,而 obj1.value 仍然是函数的外部
- excel - 使用单元格 B3 中的日期值重命名工作簿中的多个工作表
- .net-core - 如何将 EWS API 与 Console App Net Core 一起使用
- electron - 可以在“开发模式”中写入文件,但不能在电子中写入“分布式模式”
- google-cloud-platform - 带有 TCP 负载均衡器的 Cloud VPN
- javascript - 纸张自动完成未显示任何结果
- javascript - 如何在请求节点js库中传递cookie