2012-02-24 56 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幾乎總是可取的,因爲它不圍繞每年兩次飛躍。

相關問題