簡體   English   中英

使用發布-訂閱模式通過SignalR向客戶端發送更新

[英]sending updates to clients with SignalR using publish-subscribe pattern

我有一些信息需要實時顯示給用戶。 在我重復調用服務器獲取新數據之前。

現在,我正在考慮用SignalR代替這些重復的呼叫。 一般的想法是在客戶端上訂閱集線器,當將新條目添加到數據庫時,該集線器將向所有客戶端發送更新,但是我堅持使用該結構的一般設計。

所以我有我的WebAPI項目和服務層。 在服務中,添加新條目時,我將引發一個事件,集線器內部將捕獲該事件並將更新發送給所有客戶端。

用SignalR如何實現這些好方法嗎? 考慮到我正在使用asp.net WebAPI和SimpleInjector,有人可以解釋一下我該如何實現。

具有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);
    }
}

圍繞SignalR設計發布/訂閱的方法有很多

我為SignalR創建了一個包裝,以事件聚合形式解決它

請參閱維基

https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki

使用nuget安裝

Install-Package SignalR.EventAggregatorProxy 

參見演示項目https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/tree/master/SignalR.EventAggregatorProxy.Demo.MVC4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM