首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种内置的方式只注册特定的主题?

有没有一种内置的方式只注册特定的主题?
EN

Stack Overflow用户
提问于 2015-12-11 21:55:18
回答 2查看 214关注 0票数 0

我想使用signalR将事件从我的服务器广播到客户端代理。服务器使用多租户架构,我希望通过signalR组来分隔signalR-Hub中的每个租户。

此外,我想通过signalR广播我的“框架事件”。客户端应该为他需要的事件注册自己。这个问题可以通过"signalR-Topics“来解决吗?或者客户端必须只注册他想要的事件,比如:

代码语言:javascript
复制
myHub.On<string>("addMessage", param => {
                Console.WriteLine(param);
            });

此示例有一个限制,即所有事件/方法都必须在服务器上定义,如果框架获得一个新事件,我还必须添加一个新的signalR方法/事件。

另一个问题是:如果客户端想要从"addMessage“中解锁?是否可以删除注册"myHub.On("addMessage"...“而运行时呢?

另一个想法是:如果我只发布“一个”泛型事件方法,并附加一个字符串参数"topic“。客户端可以在启动时注册特定的“主题”,并且在服务器端可以确定哪些客户端获得事件。我会将客户端/主题映射存储在字典中。

代码语言:javascript
复制
var topciMapping = Dictionary<string, List<string>>;
//the key is the topic name, and the list contains the signalR connectionIds

下一个问题是:我可以将事件发送到自定义的connectionIds列表吗?

这应该能起到作用,对吧?

代码语言:javascript
复制
var connectionIds = new List<string>();
Clients.Clients(connectionIds)
EN

回答 2

Stack Overflow用户

发布于 2015-12-14 16:06:05

如果你有想要发送消息的所有connectionIDs的列表,你基本上可以这样做:

代码语言:javascript
复制
    foreach(var connectionId in ConnectionList) 
       Clients.Client(connectionId).sendMessage(message);

希望这能有所帮助。

祝你好运!

票数 1
EN

Stack Overflow用户

发布于 2015-12-14 18:07:25

“其他想法”是绝对有意义的。请注意,已经有一种按名称寻址组的可能性,这非常适合您的主题。这样,您已经对用户进行了分组,然后可以轻松地寻址这些用户:

代码语言:javascript
复制
Clients.Group(groupName).addChatMessage(name, message);
Clients.OthersInGroup(groupName).addChatMessage(name, message);

参考:Working with groups in SignalR

编辑

泛型方法就是这样做的。此外,根据您在评论中所说的您已经在使用groups的内容,Dictionary主题是有意义的。此外,通过Clients.Clients(connectionIds)的寻址也应该起作用。

所以一般来说,如果你问这是不是一个好的方法,那么我会说是。我找不到任何关于"SignalR-Topics“的东西,想知道我是不是错过了什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34225191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档