簡體   English   中英

如何編寫兩個具有服務器方法的集線器,它們在while循環中運行並將數據發送到SignalR客戶端

[英]how to write two hub which has server method runs in while loop and send data to SignalR client

我需要在同一頁面上顯示實時庫存數據並同時進行通知。我使用了角度js,點網signalR並放置了兩個while循環,該循環將偵聽流媒體並將數據推送到客戶端,但未給出預期結果。

//第一個客戶

var stockFeedHub = $.connection.stockFeedHub;
    $.connection.hub.start();
    $.connection.hub.logging = true;
    $.connection.hub.start().done(function () {
        stockFeedHub.server.send("-1");
    })
    .fail(function () { console.log('Could not connect stockFeedHub'); });

    stockFeedHub.client.sendStocksData = function (data) {
}

//第二個客戶

var notificationFeedHub = $.connection.notificationFeedHub;
    $.connection.hub.start().done(function () {
        notificationFeedHub.server.getNotification();
    })
    .fail(function () { console.log("fail"); });

    notificationFeedHub.client.sendNotification = function (data) {
//some logic
    }

//加一

 public class NotificationFeedHub : Hub
    {
        public void GetNotification()
        {
                while (true)
                {
                    //NotificationMessage I am getting from Redis.
                    //Call Client method to send notification.

                    Clients.All.sendNotification(notificationMessage));
                    Thread.Sleep(1000*5);
                }
        }

    }

//第二個Hub類

public class StockFeedHub: Hub
        {
            public void Send()
            {
                    while (true)
                    {
                        //I am getting stockLiveData from streamer server.
                        //Call Client method to send sendStocksData.

                        Clients.All.sendStocksData(stockLiveData));
                        Thread.Sleep(1000*5);
                    }
            }

        }

我由於while循環而面臨問題,如果我想連續獲取兩個數據,我不確定還能做什么。

當前,您正在使用Web客戶端觸發推送,然后在每次發出請求時都竊取請求線程,並在睡眠狀態下阻止它。 不要竊取SignalR的線程,而要創建您自己的線程或使用已經運行的線程為您服務。

在這種情況下,您的庫存飄帶應該有自己的線程來引發庫存更新事件。 如果是這樣,請在收到新的庫存更新時致電StockFeedHub並將庫存更新發送給所有客戶。

void HandleNewStockMessage(StockModel stock){
  GlobalHost
    .ConnectionManager
    .GetHubContext<StockFeedHub>()
    .Clients.All.sendStocksData(stock);
}

有關Signalr 呼叫中心的更多信息。

我不確定您如何使用Redis,我想您是將其用於背板。 如果是這樣,請使用redis文檔檢查橫向擴展 收到通知時,您只需要發送通知(類似於庫存數據),並且背板將向外擴展消息。

暫無
暫無

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

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