[英]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.