[英]Is there a built-in way to register only for specific topics?
我想使用signalR将事件从服务器广播到客户端代理。 该服务器使用多租户架构,我想通过signalR组将signalR-Hub中的每个租户分开。
此外,我想通过signalR广播我的“框架事件”。 客户应为自己需要的事件进行注册。 这个问题可以用“ signalR-Topics”解决吗,或者客户只能注册他想要的事件,例如:
myHub.On<string>("addMessage", param => {
Console.WriteLine(param);
});
该示例具有局限性,所有事件/方法都必须在服务器上定义,并且如果框架获取新事件,我也不得不添加新的signalR方法/事件。
另一个问题是:如果客户端要取消订阅“ addMessage”? 是否可以在运行时删除注册“ myHub.On(“ addMessage” ...“?
另一个想法:如果我只发布“一个”通用事件方法,并带有附加的字符串参数“ topic”。 客户端可以在启动时注册特定的“主题”,并且可以在服务器端确定哪个客户端获取了事件。 我会将客户端/主题映射存储在字典中。
var topciMapping = Dictionary<string, List<string>>;
//the key is the topic name, and the list contains the signalR connectionIds
下一个问题是:我可以将事件发送到连接ID的自定义列表吗?
这应该可以解决问题,对吗?
var connectionIds = new List<string>();
Clients.Clients(connectionIds)
如果您具有要将消息发送到的所有connectionIDs
的列表,则基本上可以执行以下操作:
foreach(var connectionId in ConnectionList)
Clients.Client(connectionId).sendMessage(message);
希望这可以帮助。
祝你好运!
“其他想法”绝对有道理。 请注意,已经可以通过名称对组进行寻址,这非常适合您的主题。 这样,您已经对用户进行了分组,然后可以轻松解决:
Clients.Group(groupName).addChatMessage(name, message);
Clients.OthersInGroup(groupName).addChatMessage(name, message);
参考: 在SignalR中使用组
编辑
通用方法是接下来的方法。 另外,根据您在评论中所说的,您已经在使用groups
的主题, Dictionary
才有意义。 通过Clients.Clients(connectionIds)
寻址也应该起作用。
因此,总的来说,如果您要问这是否是一种不错的方法,那么我会说是的。 我找不到有关“ SignalR-Topics”的任何东西,想知道我是否错过了什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.