SignalR 2.0入門

本教程展現如何使用那麼 SignalR 建立一個實時聊天應用程序。你會那麼 SignalR 添加一個空的 ASP.NET web 應用程序,建立一個 HTML 頁面發送並顯示消息。

概述

本教程介紹了那麼 SignalR 發展展現瞭如何構建一個簡單的基於瀏覽器的聊天應用程序。你會那麼 SignalR 庫添加到一個空的 ASP.NET web 應用程序、 建立一個集線器類將消息發送到客戶端,和建立一個容許用戶發送和接收聊天消息的 HTML 頁面。演示如何在 MVC 5 建立一個聊天應用程序使用的 MVC 視圖的相似教程,請參閱入門那麼 SignalR 2 和 MVC 5.javascript

注︰本教程演示如何建立那麼 SignalR 應用程序版本 2 中。那麼 SignalR 之間的更改的詳細信息 1.x 和 2,請參閱升級那麼 SignalR 1.x 項目視覺工做室 2013年發行說明.css

那麼 SignalR 是開源.NET 庫,用於構建 web 應用程序須要實時用戶交互或實時數據更新。例子包括社交應用程序、 多用戶遊戲、 業務協做和新聞,天氣或財務更新的應用程序。這些一般被稱爲實時應用程序。html

那麼 SignalR 簡化了構建實時應用程序的過程。它包括 ASP.NET 服務器庫和 JavaScript 客戶端庫,以使它更易於管理客戶端-服務器鏈接並將內容更新推送到客戶端。你能夠那麼 SignalR 庫添加到現有的 ASP.NET 應用程序以得到實時功能。java

本教程演示下面的那麼 SignalR 開發任務︰jquery

  • 將那麼 SignalR 庫添加到 ASP.NET web 應用程序。
  • 建立一個集線器類,以將內容推送到客戶端。
  • 建立浩然啓動類,以將應用程序配置。
  • 使用 web 頁中的那麼 SignalR jQuery 庫發送郵件並顯示更新從集線器。

下面的屏幕快照顯示在瀏覽器中運行的聊天應用程序。每一個新用戶能夠發表評論,並查看用戶加入聊天后添加註釋。git

Chat instances

各節︰github

設置項目

本節演示如何使用 Visual Studio 2013 和那麼版本 2 SignalR 來建立空的 ASP.NET web 應用程序,添加那麼 SignalR,並建立聊天應用程序。web

先決條件︰windows

  • 視覺工做室 2013 年。若是你沒有 Visual Studio,請參見ASP.NET 下載要免費視覺工做室 2013年快遞發展的工具。

下列步驟將使用 Visual Studio 2013 建立 ASP.NET 空 Web 應用程序並添加那麼 SignalR 庫︰瀏覽器

  1. 在 Visual Studio 中建立一個 ASP.NET Web 應用程序。

    Create web

  2. 新的 ASP.NET 項目窗口中,保留選定,而後單擊建立項目.

    Create empty web

  3. 解決方案資源管理器中,右鍵單擊項目,選擇添加|那麼 SignalR 集線器類 (v2)將類命名爲ChatHub.cs並將其添加到項目。此步驟將建立ChatHub類,並向項目中添加一組腳本文件和支持那麼 SignalR 的程序集引用。

    注︰你也能夠向項目添加那麼 SignalR 經過打開工具 |庫包管理器 |程序包管理器控制檯和運行命令︰

    install-package Microsoft.AspNet.SignalR

    若是你使用控制檯來添加那麼 SignalR,那麼 SignalR 集線器類做爲一個單獨的步驟以後建立您添加那麼 SignalR。

    注︰若是您使用的 Visual Studio 2012,那麼 SignalR 集線器類 (v2)模板將不可用。您能夠添加一個名爲ChatHub相反的普通

  4. 解決方案資源管理器中,展開腳本節點。JQuery 和那麼 SignalR 腳本庫是在項目中可見。

  5. 新的ChatHub類中的代碼替換爲下面的代碼。

    using System; using System.Web; using Microsoft.AspNet.SignalR; namespace SignalRChat { public class ChatHub : Hub { public void Send(string name, string message) { // Call the broadcastMessage method to update clients. Clients.All.broadcastMessage(name, message); } } }
  6. 解決方案資源管理器中,右鍵單擊項目,而後單擊添加|歐文真啓動類Startup新類的名稱並單擊肯定。

    注︰若是您使用的 Visual Studio 2012,浩然啓動類模板將不可用。您能夠添加一個名爲Startup相反的普通

  7. 更改成如下內容的新的啓動類。

    using Microsoft.Owin; using Owin; [assembly: OwinStartup(typeof(SignalRChat.Startup))] namespace SignalRChat { public class Startup { public void Configuration(IAppBuilder app) { // Any connection or hub wire up and configuration should go here app.MapSignalR(); } } }
  8. 解決方案資源管理器中,右鍵單擊項目,而後單擊添加|HTML 頁新頁index.html名稱.

  9. 解決方案資源管理器中,右鍵單擊 HTML 頁面,您只需建立並單擊設置爲起始頁.

  10. 在 HTML 頁面中的默認代碼替換爲下面的代碼。

    ︰ 版本那麼 SignalR 腳本能夠經過軟件包管理器進行安裝。驗證下面的腳本引用對應的版本 (他們會不一樣,若是你添加了那麼 SignalR 使用 NuGet,而不是添加一個集線器。) 項目中的腳本文件

    <!DOCTYPE html> <html> <head> <title>SignalR Simple Chat</title> <style type="text/css"> .container { background-color: #99CCFF; border: thick solid #808080; padding: 20px; margin: 20px; } </style> </head> <body> <div class="container"> <input type="text" id="message" /> <input type="button" id="sendmessage" value="Send" /> <input type="hidden" id="displayname" /> <ul id="discussion"> </ul> </div> <!--Script references. --> <!--Reference the jQuery library. --> <script src="Scripts/jquery-1.6.4.min.js" ></script> <!--Reference the SignalR library. --> <script src="Scripts/jquery.signalR-2.1.0.min.js"></script> <!--Reference the autogenerated SignalR hub script. --> <script src="signalr/hubs"></script> <!--Add script to update the page and send messages.--> <script type="text/javascript"> $(function () { // Declare a proxy to reference the hub.  var chat = $.connection.chatHub; // Create a function that the hub can call to broadcast messages. chat.client.broadcastMessage = function (name, message) { // Html encode display name and message.  var encodedName = $('<div />').text(name).html(); var encodedMsg = $('<div />').text(message).html(); // Add the message to the page.  $('#discussion').append('<li><strong>' + encodedName + '</strong>:&nbsp;&nbsp;' + encodedMsg + '</li>'); }; // Get the user name and store it to prepend to messages. $('#displayname').val(prompt('Enter your name:', '')); // Set initial focus to message input box.  $('#message').focus(); // Start the connection. $.connection.hub.start().done(function () { $('#sendmessage').click(function () { // Call the Send method on the hub.  chat.server.send($('#displayname').val(), $('#message').val()); // Clear text box and reset focus for next comment.  $('#message').val('').focus(); }); }); }); </script> </body> </html>
  11. 所有保存項目。

運行示例

  1. 按 F5 鍵在調試模式下運行該項目。在 HTML 頁面加載在一個瀏覽器實例和用戶名稱的提示。

    Enter user name

  2. 輸入用戶的名稱。

  3. 從瀏覽器的地址行中複製的 URL 和用於打開兩個瀏覽器實例。在每一個瀏覽器實例,輸入一個惟一的用戶名稱。
  4. 在每一個瀏覽器實例中添加註釋並單擊發送評論應該在全部的瀏覽器實例中顯示。

    注︰這個簡單的聊天應用程序不維護服務器上的討論範圍。集線器廣播於當前全部用戶的評論。隨後加入聊天的用戶將看到消息添加時間從他們加入。

    下面的屏幕快照顯示了運行在三個瀏覽器實例,全部的一切都更新時的一個實例將消息發送的聊天應用程序︰

    Chat browsers

  5. 解決方案資源管理器,檢查腳本文檔節點運行的應用程序。還有一個名爲樞紐,那麼 SignalR 庫在運行時動態生成的腳本文件。此文件管理 jQuery 腳本和服務器端代碼之間的通訊。

檢查代碼

那麼 SignalR 聊天應用程序演示了兩個基本的那麼 SignalR 開發任務︰ 建立一個樞紐做爲主要協調對象在服務器上,並使用那麼 SignalR jQuery 庫發送和接收郵件。

那麼 SignalR 集線器

在代碼示例中的ChatHubMicrosoft.AspNet.SignalR.Hub類派生的類。集線器類派生是一個有用的方式來創建一個應用程序,那麼 SignalR。你能夠在您的集線器類上建立公共方法,而後經過調用他們從 web 頁中的腳本訪問這些方法。

在聊天代碼中,客戶端調用ChatHub.Send方法將發送一封新郵件。集線器反過來將消息發送到全部客戶端經過調用Clients.All.broadcastMessage.

Send方法演示中心的幾個概念︰

  • 集線器上聲明公共方法,以便客戶端能夠調用它們。
  • 使用Microsoft.AspNet.SignalR.Hub.Clients動態屬性來訪問全部客戶端鏈接到該集線器。
  • 調用在客戶端 (如broadcastMessage函數) 上的一個函數來更新客戶端。

    public class ChatHub : Hub { public void Send(string name, string message) { // Call the broadcastMessage method to update clients. Clients.All.broadcastMessage(name, message); } }

那麼 SignalR 和 jQuery

HTML 頁中的代碼示例演示如何使用那麼 SignalR jQuery 庫,那麼 SignalR 集線器與溝通。在代碼中的基本任務宣佈代理引用的樞紐,聲明瞭一個函數,該服務器能夠調用內容推送到客戶端,並開始將消息發送到集線器的鏈接。

下面的代碼聲明對樞紐代理的引用。

var chat = $.connection.chatHub;

 

︰ 在 JavaScript 對服務器類和其成員的引用是在 camel 大小寫。該代碼示例做爲chatHub引用在 JavaScript 中的 C# ChatHub.

下面的代碼是如何建立一個回調函數在腳本中。在服務器上的集線器類調用這個函數將內容更新推送到每一個客戶端。這兩條線,HTML 編碼內容時,才顯示它是可選的顯示簡單的方式來防止腳本注入。

 chat.client.broadcastMessage = function (name, message) { // Html encode display name and message.  var encodedName = $('<div />').text(name).html(); var encodedMsg = $('<div />').text(message).html(); // Add the message to the page.  $('#discussion').append('<li><strong>' + encodedName + '</strong>:&nbsp;&nbsp;' + encodedMsg + '</li>'); };

 

下面的代碼演示如何用集線器打開一個鏈接。代碼啓動鏈接,而後將它傳遞一個函數來處理 HTML 頁中的發送按鈕上的單擊事件。

注意︰ 此方法可確保該事件處理程序執行以前創建鏈接。

 $.connection.hub.start().done(function () { $('#sendmessage').click(function () { // Call the Send method on the hub.  chat.server.send($('#displayname').val(), $('#message').val()); // Clear text box and reset focus for next comment.  $('#message').val('').focus(); }); });

 

接下來的步驟

你學會了,那麼 SignalR 是一個用於構建實時 web 應用程序框架。您還學習了幾個那麼 SignalR 開發任務︰ 如何將那麼 SignalR 添加到 ASP.NET 應用程序、 如何建立一個集線器類,以及如何發送和接收郵件從集線器。

有關如何部署到 Azure 的示例那麼 SignalR 應用程序的演練,請參閱使用那麼 SignalR 與 Web 應用程序在 Azure 應用程序服務有關如何將 Visual Studio web 項目部署到 Windows Azure Web 站點的詳細信息,請參閱建立 ASP.NET web 應用程序在 Azure 應用程序服務.

若要了解更多高級那麼 SignalR 的發展概念,請訪問下面的網站,那麼 SignalR 源代碼和資源︰

相關文章
相關標籤/搜索