2016-11-25 1 views
0

Я новичок в signalR.Я разрабатываю простое приложение в signalR. Требование заключается в том, что signalR необходимо обновлять текущее время для клиента несколько раз с некоторой задержкой времени. Пока я запущен, код я получаю ответ сервера только на время. Это не повторяется снова и снова. Мне нужно обратное обращение к тому жеHubclass для обновления текущего времени для клиента снова и снова!Как добавить функцию callBack для моего hubClass в signalR для обновления текущего состояния работы клиенту с задержкой по времени?

вот мой код: -

Javascript код клиента: -

<body> 
<div class="container"> 
<input type="hidden" id="name" /> 
</div> 
<script src="Scripts/jquery-1.6.4.min.js"></script> 
<script src="Scripts/jquery.signalR-2.2.1.min.js"></script> 
<script src="signalr/hubs"></script> 
<script type="text/javascript"> 
$(function() { 
     var chat = $.connection.timeHub; 
     chat.client.broadcastMessage = function (name,current) { 
     var now = current; 
     console.log(current); 
     $('div.container').append('<p><strong>'+name+"=" 
       + now + '</strong></p>'); 

     }; 
     $("#name").val(prompt("Enter the UserName", "")); 

      $.connection.hub.start().done(function() { 
       chat.server.send($("#name").val()); 

      }); 

    }); 
</script> 
</body> 

HubClass: -

public class timeHub : Hub 
{ 
    public void send(string name) 
    { 

     while(true) 
     { 

      string current = DateTime.Now.ToString("HH:mm:ss:tt"); 
      Clients.All.broadcastMessage(name,current); 
      Console.WriteLine(current); 
      Console.ReadLine(); 
      System.Threading.Thread.Sleep(3000); 
      send(name); 
     } 
    } 
} 

MyOwin Startup Класс: -

[assembly: OwinStartup(typeof(Time.Startup))] 

namespace Time 
    { 
    public class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      app.MapSignalR(); 
     } 
    } 
} 

Как я добавляю функцию обратного вызова для моего HubClass в Javascript Client Code в SignalR.

вот мой выходной ток без функции обратного вызова и timedelay: -

It update the current Client in time only

но signalR и .net приложения клиента или рабочим fine.I нужно время задержки для hubclass и обратного вызов класса samehub периодически ?

Here another output

Можно ли обратного вызова того же класса концентратора в сервере с некоторой задержкой во времени? Для этого добавлена ​​временная задержка в hubclass. и я вызываю hubclass на сервере. Это не сработает. Может ли кто-нибудь предоставить мне решение для этого?

ответ

1

В идеале вы хотели бы использовать таймер, который вызывает метод broadcastMessage с текущим временем. Однако есть некоторые проблемы с вашим hub-методом send. Также SignalR создает экземпляр класса концентратора для каждого вызова, и состояние не поддерживается.

+0

Спасибо hex. Для этого я добавил таймер внутри класса концентратора. и установите цикл с рекурсивными функциями. Теперь решение работает. – creator

+1

@ G.Thirunavukkarasu Вы должны фактически транслировать время клиентам извне хаба. На сервере создайте класс, в котором у вас есть hubcontext. таймер и метод делегата для таймера. Метод получит текущее время и будет использовать hubcontext для вызова сообщения broadcastMessage. Вы не должны устанавливать таймер/цикл внутри класса концентратора. Проверьте эту ссылку MSDN, где они подробно рассмотрят этот вопрос: https://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server#callfromoutsidehub – hexterminator

+0

штраф hex.I будет пройти через это. – creator