2012-02-24 60 views
0

我靠着SignalR。我如何编写一个简单的应用程序,以便用户可以使用Hub实时查看服务器时间。每隔1秒,服务器将从服务器向连接的客户端发送时间如何使用SignalR制作服务器时间应用程序

+1

你有什么具体问题吗?你写了什么吗? – nmat 2012-02-24 10:42:47

回答

3

您可以在使用线程时执行此操作。

例集中器类:

public class ServerTime : Hub 
{ 
    public void Start() 
    { 
     Thread thread = new Thread(Write); 
     thread.Start(); 
    } 

    public void Write() 
    { 
     while (true) 
     { 
      Clients.settime(DateTime.Now.ToString()); 
      Thread.Sleep(1000); 
     } 
    } 
} 

示例脚本:

<script type="text/javascript"> 
    $(document).ready(function() { 
     var time = $.connection.serverTime; 
     $("#btnTest").click(function() { 
      time.start(); 
     }); 

     time.settime = function (t) { 
      $("#Time").html(t); 
     }; 
     $.connection.hub.start(); 
    }); 
</script> 
<div id="Time"></div> 
<input id="btnTest" type="button" value="Test"/> 

线程将开始工作,当您单击为btnTest。 线程每秒发送一次消息给页面。

+0

那么,如果其他用户访问此页面会发生什么?那么我们有两个线程开始? – vNext 2012-02-28 08:16:13

+0

您不需要启动两个线程。因为它会在线程第一次启动时发送ServerTime所有连接的用户。开始线程一次就足够了。 – sinanakyazici 2012-02-28 08:55:24

+0

我对signalR也是新手。我尝试了上面的确切代码的示例,但我仍然收到以下错误: “SignalR:连接必须在数据可以发送之前启动,请在.send()之前调用.start()。 我的参考资料都是正确的。我很难过! – Dkong 2012-03-02 08:00:21

-1

创建一个监听器,并引发一个事件时,通知被添加:)因此,你就不必不断地检查数据库:)

0

在Global.asax中在Application_Start(object sender, EventArgs e)方法创建一个后台线程并启动它。在该线程,你需要这样做是为了让你的集线器访问:

IConnectionManager connectionManager = AspNetHost.DependencyResolver 
             .Resolve<IConnectionManager>(); 
dynamic clients = connectionManager.GetClients<ServerTime>(); 
clients.settime(DateTime.UtcNow.ToString()); 

NB DateTime.UtcNow几乎总是可取的,因为它不围绕每年两次飞跃。

相关问题