繁体   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