我有一些需要实时显示给用户的信息。在我重复调用服务器以获取新数据之前。
现在我想用SignalR替换这些重复的调用。一般的想法是在客户端上订阅中心,当新的条目被添加到数据库时,它将向所有客户端发送更新,但是我坚持使用该结构的一般设计。
所以我有我的WebAPI项目和服务层。在添加新条目的服务中,我将引发一个事件,并在内部集中捕获该事件并向所有客户端发送更新。
使用SignalR实现这些事情是否正确?有人可以解释一下我是如何实现的,因为我使用的是asp.net WebAPI和SimpleInjector。
答案 0 :(得分:2)
带有signalR的PubSub模式可以使用组本地实现。使用组名作为主题,用户可以通过加入\离开组来订阅\取消订阅。
以下是代码段。它是直截了当的,它应该可以很好地扩展。
[HubName("PubSub")]
public class PubSubHub : Hub {
public void Publish(string topic, object data) {
Clients.Group(topic).onNewMsg(topic, data);
}
public async Task Subscribe(string topic) {
await Groups.Add(Context.ConnectionId, topic);
Clients.Client(Context.ConnectionId).onSubscribed(topic);
}
public async Task Unsubscribe(string topic) {
await Groups.Remove(Context.ConnectionId, topic);
Clients.Client(Context.ConnectionId).onUnsubscribed(topic);
}
}
答案 1 :(得分:1)
围绕SignalR设计pub / sub有很多方法
我为SignalR创建了一个包装器,以事件聚合形式解决它
请参阅维基
https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki
使用nuget安装
Install-Package SignalR.EventAggregatorProxy