SignalR:如何在signalr中自动将内容从服务器推送到客户端?

时间:2016-11-24 23:37:48

标签: javascript c# server client signalr

我正在使用signalR创建一个.net Web应用程序。我的要求是,当客户端开始托管时,服务器会自动将当前时间值推送到客户端,并递归一些时间延迟。我写了代码。但是signalR无法自动将消息发送给客户端?

我认为,signalR需要客户端的一些输入。我知道每次信号器都期望通过集线器从客户端输入。无论如何都要在服务器中自动调用客户端?

顺便说一下我编写的代码。这是正确的吗?

这是我的HUB: -

  public class timeHub : Hub
    {
    public void Send()
    {

        while(true)
        {
        var current = DateTime.Now.ToString("HH:mm:ss:tt");
        Clients.All.broadcastMessage(current);
        Console.WriteLine(current);
        Console.ReadLine();
        System.Threading.Thread.Sleep(5000);

        }
    }
}

My Owin创业班: -

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

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

         }
        }
      }

我的客户端javascript代码是: -

        <div class="container">
        </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 (current) {
            var now = current;
            console.log(current);
            $('div.container').append('<p><strong>' 
                 + now + '</strong></p>');
        };
       $.connection.hub.start().done(function () {

                chat.server.send();
            });
       });
       </script>

如何在信号器中没有客户端调用的情况下自动将cotents从服务器推送到客户端?

任何人都可以为我提供解决此问题的解决方案吗?

My Empty Client Page

1 个答案:

答案 0 :(得分:1)

我所看到的是你的代码是没有任何东西正在调用你的timeHub:Send()方法。 您已经定义了一个集线器并定义了一个无限循环的发送功能,但它看起来好像您忘记启动Send()泵。
你需要打电话给它!请记住,因为Send()函数永远不会返回,所以调用Send()的任何线程都将被阻止。

我建议启动一个Task,以便初始调用Send()不会阻止你的主线程。

祝你好运!