簡體   English   中英

signalR調用服務器方法,該方法調用集線器外部的回調方法。 如何從該方法調用客戶端功能?

[英]signalR calls a server method and that method calls a callback method ,outside the hub. How can I call client function from that method?

我想處理數據流,需要實時顯示處理過的數據。 為此,我創建了一個集線器類

    public class AzureGuidanceEventHubReceiver : Hub
      {
        EventProcessorHost eventProcessorHost;
        public async void ProcessEvents()
         {
           //Do some code here
           eventProcessorHost.RegisterEventProcessorAsync<SimpleEventProcessor>();
         }
      }

處理數據的類是,

     public class SimpleEventProcessor : IEventProcessor
      {

        public async Task ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> events)
           {
            foreach (EventData eventData in events)
             {
                int data;
                var newData = this.DeserializeEventData(eventData);
                //how to display newData in the browser????????????????????????????????                                                
             }
     }

我的客戶端代碼是

    <script type="text/javascript">
    $(function () {
        var receiverHub= $.connection.azureGuidanceEventHubReceiver;
        receiverHub.client.displayMessage = function (data) {
        var encodedData = $('<div />').text(data).html();
        // Add the message to the page. 
            $('#discussion').append('<li><strong>' + encodedData + '</li>');
        };

        //// Start the connection.
        $.connection.hub.start().done(function () {

                $('#sendmessage').click(function () {
                receiverHub.server.processEvents();
            });
        });
    });

在這里,我調用了Hub類中的ProcessEvents方法,並注冊了SimpleEventProcessor。 因此執行進入SimpleEventProcessor中的ProcessEventsAsync。 從這個ProcessEventsAsync方法,我需要調用客戶端代碼來顯示數據。 我是否還需要將SimpleEventProcessor作為集線器類?

您可以使用以下代碼來獲取HubContext,它允許您從集線器以外的地方調用客戶端方法:

var hubContext =  GlobalHost.ConnectionManager.GetHubContext<AzureGuidanceEventHubReceiver>();
hubContext.Clients.All.displayMessage(dataToDisplay);

在這里,我遇到的問題是客戶端方法DisplayMessage不是每次都執行。 我需要顯示一條消息流。 但是當我將調試器放在客戶端代碼中時,它每次都會執行。這是我的客戶端代碼。

    chat.client.displayMessage = function (data) {                
            // Html encode display data 

            debugger;

            var encodedData = $('<div />').text(data.GPSPosition).html();
            var data = encodedData.split("\n");
            var varlat = data[0].replace("Latitude:","").trim();
            var varlong = data[1].replace("Longitude:", "").trim();
            ShowInGoogleMap(varlat, varlong);
          };

我該如何顯示消息流? 為什么它只與調試器一起使用?

暫無
暫無

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

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