我想实现 SignalR 日志记录,服务器将定期 ping 所有客户端以获取任何累积的日志。
微软对此并不清楚:docs
我不明白的是是否有一种方法可以同时从所有客户那里获得结果。比如:
var logsFromAllClients = _hubContext.Clients.All.SendLogs();
但是这显然不起作用,因为
Clients.All
只是我的强类型客户端T
。这意味着它只能从一个客户端获得结果。我很好奇如果用多个活动客户端调用会发生什么?
另一个想法是迭代所有活动连接并单独请求每个客户端的日志。据我所知,开箱即用也不支持此功能。我是否能够将活动连接 ID 存储在集合中并迭代它们以实现此目的。
我还有什么遗漏的吗?
为此使用
IHubContext<T>.Groups
。
每当有新客户订阅时,将他们添加到某个命名组中(随意命名 - 可以是“每个人”):
_hubContext.Groups.AddToGroupAsync(this.Context.ConnectionId, "Everyone");
然后,当您想要告诉所有客户端发送日志时,请向群组发送消息:
_hubContext.Clients.Group("Everyone").SendAsync("SendMeYourLogs");
Carefel 不过,您可以很快获得大量数据,具体取决于预期扩展的程度。