使用发布订阅模式向带有 SignalR 的客户端发送更新

Vla*_*irs 1 c# asp.net publish-subscribe signalr asp.net-web-api

我有一些信息需要实时显示给用户。在我重复调用服务器以获取新数据之前。

现在我想用 SignalR 替换这些重复的调用。一般想法是在客户端订阅集线器,当新条目添加到数据库时,集线器将向所有客户端发送更新,但是我坚持使用该结构的一般设计。

所以我有我的 WebAPI 项目和服务层。在添加新条目时的服务中,我将引发一个事件,并在集线器内部捕获该事件并将更新发送给所有客户端。

使用 SignalR 实现这些事情的方式是否正确?鉴于我正在使用 asp.net WebAPI 和 SimpleInjector,有人可以解释我如何实现它。

Rus*_*uan 7

可以使用组在本地实现带有 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);
    }
}
Run Code Online (Sandbox Code Playgroud)