【发布时间】:2014-08-29 11:40:45
【问题描述】:
我刚刚完成了一个 SignalR 示例,即众所周知的 Chat sample。
这个示例只是从一个客户端向所有客户端广播一条聊天消息。如果我们只想向特定客户端发送消息怎么办?
(我想应该有一些ID来标识每个客户端。这些ID应该在客户端订阅服务器时存储在服务器上。服务器可以选择将消息推送到哪个ID。)
【问题讨论】:
标签: signalr
我刚刚完成了一个 SignalR 示例,即众所周知的 Chat sample。
这个示例只是从一个客户端向所有客户端广播一条聊天消息。如果我们只想向特定客户端发送消息怎么办?
(我想应该有一些ID来标识每个客户端。这些ID应该在客户端订阅服务器时存储在服务器上。服务器可以选择将消息推送到哪个ID。)
【问题讨论】:
标签: signalr
您有不同的方式将您的用户映射到连接。您可以根据自己的要求比较this tutorial中的不同方式。
另一种解决方案是为每个 userId 定义 1 个组,并在您想要通知用户时通知该组 (link)。小心,组不安全。
【讨论】:
groupsToken(服务器使用它来验证客户端所在的组)不会过期。这使得无法安全地从组中删除客户端。
context.Clients.Client 来获取客户端并将消息发送给每个客户端。
就像 Daniel 描述的那样,您可以使用组或使用 hubcontext 通过连接 ID 获取特定连接的上下文。
var client = context.Clients.Client(connectionId);
还有几个抽象 SignalR 的库,其中一些带有自己调用特定用户的方式。
我已经制作了一个这样的库,它基于事件聚合模式。它带有一个 API,可让您创建代码来确定哪些客户端应接收特定事件
https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki/Implement-constraint-handlers
这也是我写的一篇博文,展示了如何使用我的库实现声明性角色授权,也许它可以给你一些想法。 http://andersmalmgren.com/2014/06/12/client-server-event-aggregation-with-role-authorization/
【讨论】: