signalr - 将消息推送到 SignalR 中的组
问题描述
只是想集中精力处理通过SignalR
.
比如说,在私人聊天的情况下,Person A
向Person B
. 如果我正确理解了这个概念,我需要Group
为每个登录系统的用户创建一个。这样,当来自我的新消息Person A
进来时,SignalR Hub
我会将消息发送到Person B
其中只有一个用户的组,即Person B
。
在这种方法中,我基本上会Group
为每个用户创建一个唯一的,以便我可以灵活地将数据推送给每个唯一的用户。我可以使用idUserId
作为Group
ID。
这是有选择地处理向每个唯一用户推送数据的方法吗?
解决方案
您可以像这样手动获取客户端 ID,然后使用 hubcontext 发送它们以避免创建很多组(您只需要实现一个方法,在我使用 dtos 的情况下,您可以从您的资源获得连接)
我假设您的集线器有某种类型的连接管理器,这是文档中的一个示例
就我而言,我有一个动态配置,用于使用 DTO 类型配置集线器,并且我使用通用集线器基础发送集线器,这是一个示例实现:
警告:我在这个例子中使用的.Net-Core 可能会略有不同
//NOTE: THub must be the one Registered with MapHubs in the Startup
//class or your connections won't be there because Hubs are not contravarient
public abstract class HubBase<TDTO, THub> : Hub
Where THub: HubBase<TDTO, THub>
{
protected IHubContext<THub> hubContext;
HubBase(IHubContext<THub> hubContext)
{
this._hubContext = hubContext;
}
protected abstract List<string> GetConnectionsByDto(TDTO dto)
protected async Task SendFilteredAsync(string eventName, TDTO dto)
{
var clientIds = await this.GetConnectionsByDto(dto);
if (false == clientIds.Any())
{
return;
}
var broadcastTasks = clientIds.Select(async clientId =>
await this._hubContext.Clients.Client(clientId).SendAsync(eventName, dto));
await Task.WhenAll(broadcastTasks);
}
}
推荐阅读
- flask - Keras“fit_generator”抛出“会话图为空。在调用 run() 之前向图中添加操作。”
- python - 芹菜活动任务因工人关闭而丢失
- javascript - JavaScript:在 plotly.js 图中的 plotly_click 事件中打开 ui.bootstrap 模式
- python - 在 python 代码中使用 vcsi(视频联系表)
- java - 如何阻止 Firestore 保存我的所有数据?
- javascript - 打字稿更新对象内的项目
- python - Python:如何确定作为字典值的无序元组列表是否在另一个 dictionaries.values() 中?
- javascript - Javascript将数组对象分配给另一个数组
- c++ - MPI_Bcast c++ STL 向量
- javascript - sweetalert2 不等待确认