Sdílet prostřednictvím


Kurz: Chat v reálném čase s využitím SignalR 2 a MVC 5

V tomto kurzu se dozvíte, jak pomocí ASP.NET SignalR 2 vytvořit chatovací aplikaci v reálném čase. Službu SignalR přidáte do aplikace MVC 5 a vytvoříte zobrazení chatu pro odesílání a zobrazování zpráv.

V tomto kurzu jste:

  • Nastavení projektu
  • Spuštění ukázky
  • Kontrola kódu

Upozornění

Tato dokumentace není určená pro nejnovější verzi služby SignalR. Podívejte se na ASP.NET Core SignalR.

Požadavky

Nastavení projektu

Tato část ukazuje, jak pomocí sady Visual Studio 2017 a SignalR 2 vytvořit prázdnou aplikaci ASP.NET MVC 5, přidat knihovnu SignalR a vytvořit chatovací aplikaci.

  1. V sadě Visual Studio vytvořte aplikaci ASP.NET jazyka C#, která cílí na rozhraní .NET Framework 4.5, pojmenujte ji SignalRChat a klikněte na OK.

    Vytvoření webu

  2. V části Nová webová aplikace ASP.NET – SignalRMvcChat vyberte MVC a pak vyberte Změnit ověřování.

  3. V části Změnit ověřování vyberte Bez ověřování a klikněte na OK.

    Vyberte Bez ověřování.

  4. V části Nová webová aplikace ASP.NET – SignalRMvcChat vyberte OK.

  5. V Průzkumník řešení klikněte pravým tlačítkem na projekt a vyberte Přidat>novou položku.

  6. V části Přidat novou položku – SignalRChat vyberte Installed>Visual C#>Web>SignalR a pak vyberte SignalR Hub Class (v2).

  7. Pojmenujte třídu ChatHub a přidejte ji do projektu.

    Tento krok vytvoří soubor třídy ChatHub.cs a přidá do projektu sadu souborů skriptů a odkazů na sestavení, které podporují SignalR.

  8. Nahraďte kód v novém souboru třídy ChatHub.cs tímto kódem:

    using System;
    using System.Web;
    using Microsoft.AspNet.SignalR;
    namespace SignalRChat
    {
        public class ChatHub : Hub
        {
            public void Send(string name, string message)
            {
                // Call the addNewMessageToPage method to update clients.
                Clients.All.addNewMessageToPage(name, message);
            }
        }
    }
    
  9. V Průzkumník řešení klikněte pravým tlačítkem na projekt a vyberte Přidat>třídu.

  10. Pojmenujte novou třídu Startup a přidejte ji do projektu.

  11. Nahraďte kód v souboru třídy Startup.cs tímto kódem:

    using Owin;
    using Microsoft.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();
            }
        }
    }
    
  12. V Průzkumník řešení vyberte Controllers>HomeController.cs.

  13. Přidejte tuto metodu do souboru HomeController.cs.

    public ActionResult Chat()
    {
        return View();
    }
    

    Tato metoda vrátí zobrazení Chat , které vytvoříte v pozdějším kroku.

  14. V Průzkumník řešení klikněte pravým tlačítkem na Domovská stránka zobrazení> a vyberte Přidat>zobrazení.

  15. V části Přidat zobrazení pojmenujte nové zobrazení Chat a vyberte Přidat.

  16. Obsah souboru Chat.cshtml nahraďte tímto kódem:

    @{
        ViewBag.Title = "Chat";
    }
    <h2>Chat</h2>
    <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>
    @section scripts {
        <!--Script references. -->
        <!--The jQuery library is required and is referenced by default in _Layout.cshtml. -->
        <!--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>
        <!--SignalR script to update the chat page and send messages.--> 
        <script>
            $(function () {
                // Reference the auto-generated proxy for the hub.  
                var chat = $.connection.chatHub;
                // Create a function that the hub can call back to display messages.
                chat.client.addNewMessageToPage = function (name, message) {
                    // Add the message to the page. 
                    $('#discussion').append('<li><strong>' + htmlEncode(name) 
                        + '</strong>: ' + htmlEncode(message) + '</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();
                    });
                });
            });
            // This optional function html-encodes messages for display in the page.
            function htmlEncode(value) {
                var encodedValue = $('<div />').text(value).html();
                return encodedValue;
            }
        </script>
    }
    
  17. V Průzkumník řešení rozbalte Položku Skripty.

    Knihovny skriptů pro jQuery a SignalR jsou viditelné v projektu.

    Důležité

    Správce balíčků možná nainstaloval novější verzi skriptů SignalR.

  18. Zkontrolujte, jestli odkazy na skripty v bloku kódu odpovídají verzím souborů skriptu v projektu.

    Odkazy na skripty z původního bloku kódu:

    <!--Script references. -->
    <!--The jQuery library is required and is referenced by default in _Layout.cshtml. -->
    <!--Reference the SignalR library. -->
    <script src="~/Scripts/jquery.signalR-2.1.0.min.js"></script>
    
  19. Pokud se neshodují, aktualizujte soubor .cshtml .

  20. V řádku nabídek vyberte Soubor>Uložit vše.

Spuštění ukázky

  1. Na panelu nástrojů zapněte Ladění skriptů a pak výběrem tlačítka Přehrát spusťte ukázku v režimu ladění.

    Zadejte uživatelské jméno.

  2. Po otevření prohlížeče zadejte název vaší identity chatu.

  3. Zkopírujte adresu URL z prohlížeče, otevřete dva další prohlížeče a vložte adresy URL do adresního řádku.

  4. V každém prohlížeči zadejte jedinečný název.

  5. Teď přidejte komentář a vyberte Odeslat. V ostatních prohlížečích to opakujte. Komentáře se zobrazují v reálném čase.

    Poznámka

    Tato jednoduchá chatovací aplikace neudržuje kontext diskuze na serveru. Centrum vysílá komentáře všem aktuálním uživatelům. Uživatelům, kteří se k chatu připojí později, uvidí zprávy přidané od okamžiku, kdy se připojí.

    Podívejte se, jak chatovací aplikace běží ve třech různých prohlížečích. Když Tom, Anand a Susan posílají zprávy, všechny prohlížeče se aktualizují v reálném čase:

    Všechny tři prohlížeče zobrazují stejnou historii chatu.

  6. V Průzkumník řešení zkontrolujte uzel Dokumenty skriptu pro spuštěnou aplikaci. Existuje soubor skriptu s názvem hubs , který knihovna SignalR generuje za běhu. Tento soubor spravuje komunikaci mezi skriptem jQuery a kódem na straně serveru.

    automaticky vygenerovaný skript centra v uzlu Dokumenty skriptu

Prozkoumání kódu

Chatovací aplikace SignalR ukazuje dvě základní úlohy vývoje služby SignalR. Ukáže vám, jak vytvořit centrum. Server používá toto centrum jako hlavní koordinační objekt. Centrum používá knihovnu SignalR jQuery k odesílání a přijímání zpráv.

SignalR Hubs v ChatHub.cs

Ve vzorovém kódu je ChatHub třída odvozená z Microsoft.AspNet.SignalR.Hub třídy . Odvození z Hub třídy je užitečný způsob, jak sestavit aplikaci SignalR. Ve třídě centra můžete vytvořit veřejné metody a pak k těmto metodám přistupovat voláním ze skriptů na webové stránce.

V kódu chatu klienti volají metodu , ChatHub.Send aby odeslali novou zprávu. Centrum pak odešle zprávu všem klientům voláním Clients.All.addNewMessageToPage.

Metoda Send ukazuje několik konceptů centra:

  • Deklarujte veřejné metody v centru, aby je klienti mohli volat.

  • Dynamická Microsoft.AspNet.SignalR.Hub.Clients vlastnost slouží ke komunikaci se všemi klienty připojenými k tomuto centru.

  • Voláním funkce v klientovi (například addNewMessageToPage funkce) aktualizujte klienty.

    public class ChatHub : Hub
    {
        public void Send(string name, string message)
        {
            Clients.All.addNewMessageToPage(name, message);
        }
    }
    

SignalR a jQuery Chat.cshtml

Soubor zobrazení Chat.cshtml v ukázce kódu ukazuje, jak pomocí knihovny SignalR jQuery komunikovat s centrem SignalR. Kód provádí mnoho důležitých úloh. Vytvoří odkaz na automaticky vygenerovaný proxy server pro centrum, deklaruje funkci, kterou server může volat za účelem nabízení obsahu klientům, a spustí připojení k odesílání zpráv do centra.

var chat = $.connection.chatHub;

Poznámka

V JavaScriptu je odkaz na serverovou třídu a její členy v camelCase. Ukázka kódu odkazuje na třídu jazyka C# ChatHub v JavaScriptu jako chatHub.

V tomto bloku kódu vytvoříte ve skriptu funkci zpětného volání.

chat.client.addNewMessageToPage = function (name, message) {
    // Add the message to the page. 
    $('#discussion').append('<li><strong>' + htmlEncode(name) 
        + '</strong>: ' + htmlEncode(message) + '</li>');
};

Třída centra na serveru volá tuto funkci k nabízení aktualizací obsahu do každého klienta. Volitelné volání htmlEncode funkce ukazuje způsob, jak obsah zprávy před zobrazením na stránce zakódovat ve formátu HTML. Je to způsob, jak zabránit injektáži skriptu.

Tento kód otevře připojení k centru.

$.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();
    });
});

Poznámka

Tento přístup zajistí navázání připojení před spuštěním obslužné rutiny události.

Kód spustí připojení a pak mu předá funkci, která zpracuje událost click na tlačítku Odeslat na stránce Chat.

Získání kódu

Stažení dokončeného projektu

Další materiály

Další informace o službě SignalR najdete v následujících zdrojích informací:

Další kroky

V tomto kurzu jste:

  • Nastavení projektu
  • Spuštění ukázky
  • Prozkoumání kódu

V dalším článku se dozvíte, jak vytvořit webovou aplikaci, která používá ASP.NET SignalR 2 k poskytování funkcí vysokofrekvenčního zasílání zpráv.