我可以从 Hub 获取多个 SignalR 客户端的结果吗

问题描述 投票:0回答:1

我想实现 SignalR 日志记录,服务器将定期 ping 所有客户端以获取任何累积的日志。

微软对此并不清楚:docs

我不明白的是是否有一种方法可以同时从所有客户那里获得结果。比如:

var logsFromAllClients = _hubContext.Clients.All.SendLogs();

但是这显然不起作用,因为

Clients.All
只是我的强类型客户端
T
。这意味着它只能从一个客户端获得结果。我很好奇如果用多个活动客户端调用会发生什么?

另一个想法是迭代所有活动连接并单独请求每个客户端的日志。据我所知,开箱即用也不支持此功能。我是否能够将活动连接 ID 存储在集合中并迭代它们以实现此目的。

我还有什么遗漏的吗?

signalr signalr-hub
1个回答
0
投票

为此使用

IHubContext<T>.Groups

每当有新客户订阅时,将他们添加到某个命名组中(随意命名 - 可以是“每个人”):

_hubContext.Groups.AddToGroupAsync(this.Context.ConnectionId, "Everyone");

然后,当您想要告诉所有客户端发送日志时,请向群组发送消息:

_hubContext.Clients.Group("Everyone").SendAsync("SendMeYourLogs");

Carefel 不过,您可以很快获得大量数据,具体取决于预期扩展的程度。

© www.soinside.com 2019 - 2024. All rights reserved.