Przejdź do treści stopki
POMOC .NET

Signalr C# (jak to działa dla programistów)

Nowoczesna sieć opiera się na interaktywności i informacji zwrotnej w czasie rzeczywistym. Podczas tworzenia aplikacji responsywnych niezbędna jest funkcjonalność internetowa działająca w czasie rzeczywistym. Właśnie w tym zakresie SignalR wyróżnia się na tle innych rozwiązań. ASP.NET Core SignalR to biblioteka, która sprawia, że dodawanie funkcji internetowych działających w czasie rzeczywistym do aplikacji jest prostsze, niż mogłoby się wydawać.

W tym samouczku wyruszymy w podróż po podstawach i niuansach SignalR. Zaczynamy!

Wprowadzenie do SignalR w ASP.NET Core

ASP.NET Core SignalR udostępnia interfejs API do tworzenia funkcji internetowych działających w czasie rzeczywistym przy użyciu WebSockets i innych technologii, takich jak zdarzenia wysyłane przez serwer. Nie ogranicza się to wyłącznie do ASP.NET Core. Z SignalR można korzystać z różnymi klientami, takimi jak przeglądarka lub aplikacja mobilna, co zapewnia natychmiastową aktualizację połączonych klientów.

Konfiguracja środowiska programistycznego

Aby rozpocząć, potrzebujesz:

Tworzenie centrum SignalR

Podstawą SignalR jest hub SignalR, centralny punkt interakcji zarówno dla klienta, jak i serwera.

Utwórz nowy projekt ASP.NET Core. Teraz dodaj nową klasę i nazwij ją ChatHub. Będzie to pełnić rolę naszego centrum SignalR.

using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;

// Define a SignalR Hub class named ChatHub
public class ChatHub : Hub
{
    // Asynchronous method to send messages
    public async Task SendMessage(string user, string message)
    {
        // Send a message to all connected clients
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;

// Define a SignalR Hub class named ChatHub
public class ChatHub : Hub
{
    // Asynchronous method to send messages
    public async Task SendMessage(string user, string message)
    {
        // Send a message to all connected clients
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}
Imports Microsoft.AspNetCore.SignalR
Imports System.Threading.Tasks

' Define a SignalR Hub class named ChatHub
Public Class ChatHub
	Inherits Hub

	' Asynchronous method to send messages
	Public Async Function SendMessage(ByVal user As String, ByVal message As String) As Task
		' Send a message to all connected clients
		Await Clients.All.SendAsync("ReceiveMessage", user, message)
	End Function
End Class
$vbLabelText   $csharpLabel

W klasie Startup zintegrujmy nasz hub.

public class Startup
{
    // Configure services and add SignalR
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSignalR(); // Add SignalR services
    }

    // Configure the app to use SignalR and map the hub
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // Setup endpoint to route to ChatHub
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapHub<ChatHub>("/chatHub");
        });
    }
}
public class Startup
{
    // Configure services and add SignalR
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSignalR(); // Add SignalR services
    }

    // Configure the app to use SignalR and map the hub
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // Setup endpoint to route to ChatHub
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapHub<ChatHub>("/chatHub");
        });
    }
}
Public Class Startup
	' Configure services and add SignalR
	Public Sub ConfigureServices(ByVal services As IServiceCollection)
		services.AddSignalR() ' Add SignalR services
	End Sub

	' Configure the app to use SignalR and map the hub
	Public Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
		' Setup endpoint to route to ChatHub
		app.UseEndpoints(Sub(endpoints)
			endpoints.MapHub(Of ChatHub)("/chatHub")
		End Sub)
	End Sub
End Class
$vbLabelText   $csharpLabel

Wdrożenie po stronie klienta

SignalR jest wszechstronny. Chociaż ten samouczek skupia się na ASP.NET Core i bibliotece klienckiej JavaScript, SignalR obsługuje różne platformy klienckie, od .NET po Java.

Korzystanie z biblioteki klienckiej SignalR

Biblioteka kliencka SignalR umożliwia kodowi po stronie klienta bezpośrednie łączenie się i komunikowanie z serwerem. W naszym przykładzie użyjmy JavaScript.

Najpierw dodaj bibliotekę kliencką SignalR JavaScript:

<script src="https://cdn.jsdelivr.net/npm/@microsoft/signalr@3.1.8/dist/browser/signalr.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@microsoft/signalr@3.1.8/dist/browser/signalr.js"></script>
HTML

Teraz możesz połączyć się z hubem:

// Create a connection to the SignalR hub
const connection = new signalR.HubConnectionBuilder()
    .withUrl("/chatHub") // The hub URL
    .build();

// Start the connection
connection.start().catch(err => console.error(err.toString()));

// Setup a listener for receiving messages
connection.on("ReceiveMessage", (user, message) => {
    console.log(`${user} says: ${message}`);
});
// Create a connection to the SignalR hub
const connection = new signalR.HubConnectionBuilder()
    .withUrl("/chatHub") // The hub URL
    .build();

// Start the connection
connection.start().catch(err => console.error(err.toString()));

// Setup a listener for receiving messages
connection.on("ReceiveMessage", (user, message) => {
    console.log(`${user} says: ${message}`);
});
JAVASCRIPT

Ten prosty kod po stronie klienta łączy się z hubem i nasłuchuje na wszelkie nadawane komunikaty.

Funkcjonalność czasu rzeczywistego w praktyce

Wysyłanie wiadomości

Korzystając z naszych wcześniejszych fragmentów kodu po stronie klienta i serwera, wysyłanie wiadomości jest bardzo proste. Komunikację może zainicjować zarówno serwer, jak i klient.

Od strony serwera:

// Send a message from the server to all connected clients
await Clients.All.SendAsync("ReceiveMessage", "Server", "Hello from server!");
// Send a message from the server to all connected clients
await Clients.All.SendAsync("ReceiveMessage", "Server", "Hello from server!");
' Send a message from the server to all connected clients
Await Clients.All.SendAsync("ReceiveMessage", "Server", "Hello from server!")
$vbLabelText   $csharpLabel

A od klienta:

// Send a message from the client to the server
connection.send("SendMessage", "Client", "Hello from client!")
    .catch(err => console.error(err.toString()));
// Send a message from the client to the server
connection.send("SendMessage", "Client", "Hello from client!")
    .catch(err => console.error(err.toString()));
JAVASCRIPT

Zaawansowana komunikacja w czasie rzeczywistym

ASP.NET Core SignalR oferuje zaawansowane funkcje komunikacji w czasie rzeczywistym:

  1. Grupowanie połączeń: Podział połączonych klientów na grupy i wysyłanie komunikatów do określonych segmentów.
  2. Obsługa rozłączeń: Automatyczne zarządzanie połączeniami i rozłączeniami klientów.
  3. Protokół binarny: Chociaż SignalR domyślnie korzysta z protokołu tekstowego, obsługuje również protokół binarny.

SignalR z usługą Azure SignalR Service

Aby uzyskać skalowalną funkcjonalność w czasie rzeczywistym, zintegruj usługę Azure SignalR. Ta w pełni zarządzana usługa obsługuje ogromną liczbę jednoczesnych połączeń, dzięki czemu idealnie nadaje się do aplikacji o wysokich wymaganiach.

Integracja usługi Azure SignalR:

  1. Zainstaluj pakiet Azure SignalR SDK.
  2. Użyj usługi Azure Service Bus do obsługi backplane.
  3. Dostosuj klasę Startup do korzystania z Azure SignalR.
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // Add Azure SignalR services
        services.AddSignalR().AddAzureSignalR();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // Use Azure SignalR and map hub with routes
        app.UseAzureSignalR(routes =>
        {
            routes.MapHub<ChatHub>("/chatHub");
        });
    }
}
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // Add Azure SignalR services
        services.AddSignalR().AddAzureSignalR();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // Use Azure SignalR and map hub with routes
        app.UseAzureSignalR(routes =>
        {
            routes.MapHub<ChatHub>("/chatHub");
        });
    }
}
Public Class Startup
	Public Sub ConfigureServices(ByVal services As IServiceCollection)
		' Add Azure SignalR services
		services.AddSignalR().AddAzureSignalR()
	End Sub

	Public Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
		' Use Azure SignalR and map hub with routes
		app.UseAzureSignalR(Sub(routes)
			routes.MapHub(Of ChatHub)("/chatHub")
		End Sub)
	End Sub
End Class
$vbLabelText   $csharpLabel

Iron Suite – rozszerzenie SignalR o narzędzia Premium .NET

Chociaż ASP.NET Core SignalR zapewnia doskonałą podstawę dla funkcjonalności internetowej w czasie rzeczywistym, programiści często poszukują narzędzi, które poprawią ogólne wrażenia i funkcjonalność. W tym miejscu na scenę wkracza pakiet bibliotek Iron Software Suite.

Iron Suite to pakiet wysokiej jakości bibliotek .NET, zaprojektowany w celu zwiększenia wydajności aplikacji ASP.NET Core, w tym tych wykorzystujących SignalR. Każdy produkt z tej Suite oferuje unikalne możliwości, zapewniając bogatsze wrażenia podczas korzystania z aplikacji. Przyjrzyjmy się bliżej tej ofercie:

IronPDF

Signalr C# (Jak to działa dla programistów) Rysunek 1

Dowiedz się więcej o możliwościach IronPDF, które pozwalają generować, edytować i odczytywać pliki PDF w aplikacjach .NET. Wyobraź sobie integrację SignalR w scenariuszu, w którym zespół współpracuje nad dokumentem w czasie rzeczywistym. W miarę wprowadzania zmian dokument może być na bieżąco konwertowany do formatu PDF, a aktualizacje są płynnie przesyłane do wszystkich podłączonych klientów. Funkcjonalność SignalR działająca w czasie rzeczywistym w połączeniu z możliwościami IronPDF może zrewolucjonizować narzędzia do współpracy.

IronPDF konwertuje HTML, adresy URL i całe strony internetowe na doskonałej jakości pliki PDF, identyczne z oryginałem. Idealnie nadaje się do zapisywania raportów online, faktur lub wszelkich informacji internetowych, które chcesz zachować. Chcesz przekonwertować HTML na PDF? Wypróbuj IronPDF już dziś!

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

IronXL

Signalr C# (Jak to działa dla programistów) Rysunek 2

Jeśli chodzi o pracę z arkuszami kalkulacyjnymi Excel, Explore IronXL Features jest mistrzem. W środowisku biznesowym arkusze kalkulacyjne odgrywają kluczową rolę. Włączenie SignalR do IronXL oznacza, że zespoły finansowe mogą pracować nad arkuszami budżetowymi w czasie rzeczywistym, obserwując zmiany na bieżąco. Wyobraź sobie scenariusz, w którym dane z różnych działów trafiają do scentralizowanego arkusza Excel, z aktualizacjami w czasie rzeczywistym dla wszystkich zainteresowanych stron. Dzięki tej kombinacji połączenie komunikacji w czasie rzeczywistym i dynamicznego zarządzania arkuszami kalkulacyjnymi staje się rzeczywistością.

IronOCR

Signalr C# (Jak to działa dla programistów) Rysunek 3

Optyczne rozpoznawanie znaków (OCR) stało się podstawowym elementem współczesnych aplikacji. Zobacz, jak IronOCR w praktyce umożliwia programistom .NET wyodrębnianie tekstu z obrazów i dokumentów. Połączenie tego z funkcjonalnością SignalR działającą w czasie rzeczywistym może całkowicie zmienić sytuację. Rozważmy platformę, na której użytkownicy przesyłają obrazy zawierające dane tekstowe. SignalR może służyć do powiadamiania użytkowników w czasie rzeczywistym po przetworzeniu obrazów przez IronOCR, dzięki czemu ekstrakcja danych staje się interaktywna i natychmiastowa.

IronBarcode

Signalr C# (Jak to działa dla programistów) Rysunek 4

BarCode jest integralną częścią zarządzania zapasami, systemów biletowych i nie tylko. Odkryj możliwości IronBarcode, które ułatwiają tworzenie i odczytywanie kodów kreskowych. Pomyśl teraz o zintegrowaniu tego z SignalR w systemie zarządzania magazynem. W miarę skanowania produktów stan magazynowy jest aktualizowany w czasie rzeczywistym, co pozwala powiadamiać podłączonych klientów o poziomach zapasów i zapewnia płynne działanie logistyki.

Wnioski

Signalr C# (Jak to działa dla programistów) Rysunek 5

Połączenie ASP.NET Core SignalR z potężnymi narzędziami Iron Suite zapewnia lepsze wrażenia zarówno dla programistów, jak i użytkowników końcowych. Funkcjonalność internetowa w czasie rzeczywistym staje się nie tylko narzędziem komunikacji, ale także narzędziem transformacyjnym, które w połączeniu z odpowiednimi zasobami, takimi jak Iron Suite, może na nowo zdefiniować aplikacje interaktywne.

Warto zwrócić uwagę na propozycję wartości oferowaną przez Iron Suite. Cena licencji każdego produktu zaczyna się od $799, zapewniając programistom zestaw funkcji klasy premium. Jeśli jednak nie jesteś pewien, czy chcesz od razu się zaangażować, każdy z tych produktów oferuje bezpłatną wersję próbną produktów Iron Software. Pozwala to przetestować możliwości przed podjęciem decyzji.

A jeśli rozważasz integrację wielu narzędzi, mamy dla Ciebie fantastyczną wiadomość: możesz kupić cały pakiet Iron Suite, zyskując dodatkową wartość za cenę zaledwie dwóch produktów! To nie tylko gwarantuje, że otrzymasz najlepszy zwrot z inwestycji, ale także wyposaża Cię w kompleksowy zestaw narzędzi, które zrewolucjonizują Twoje aplikacje .NET Core SignalR.

Często Zadawane Pytania

Czym jest SignalR i w jaki sposób usprawnia aplikacje internetowe?

SignalR to biblioteka w .NET Core, która dodaje do aplikacji funkcje internetowe działające w czasie rzeczywistym, umożliwiając natychmiastową komunikację między serwerem a klientem. Dzięki temu powstają interaktywne i responsywne aplikacje internetowe, które pozwalają na aktualizacje i informacje zwrotne w czasie rzeczywistym.

Jak skonfigurować SignalR w mojej aplikacji napisanej w języku C#?

Aby skonfigurować SignalR w aplikacji C#, należy zainstalować SDK .NET Core i używać Visual Studio do programowania. Dodaj usługi SignalR w klasie Startup i przypisz huby do punktów końcowych, aby nawiązać komunikację serwer-klient.

Jaka jest rola SignalR Hub w komunikacji w czasie rzeczywistym?

Hub SignalR pełni rolę centralnego komponentu, który ułatwia komunikację między serwerem a podłączonymi klientami. Umożliwia wysyłanie i odbieranie wiadomości w czasie rzeczywistym, co czyni go kluczowym elementem funkcjonalności SignalR.

Jak mogę obsługiwać komunikację w czasie rzeczywistym w SignalR?

Wiadomościami w czasie rzeczywistym w SignalR można zarządzać poprzez utworzenie centrum po stronie serwera oraz skryptu po stronie klienta. Skrypt JavaScript po stronie klienta nawiązuje połączenie z centrum i obsługuje wysyłanie oraz odbieranie wiadomości za pomocą metod takich jak connection.on i connection.send.

Jakie są zaawansowane funkcje SignalR?

SignalR oferuje zaawansowane funkcje, takie jak grupowanie połączeń w celu segmentacji komunikacji, płynne obsługiwanie rozłączeń klientów oraz obsługa protokołów binarnych w celu zwiększenia możliwości komunikacji w czasie rzeczywistym.

W jaki sposób usługa Azure SignalR pomaga w skalowaniu aplikacji?

Usługa Azure SignalR umożliwia skalowanie aplikacji poprzez obsługę dużej liczby jednoczesnych połączeń. Wymaga to zainstalowania zestawu SDK Azure SignalR oraz skonfigurowania klasy Startup w celu wykorzystania infrastruktury Azure do skalowalnej komunikacji w czasie rzeczywistym.

Jak można wykorzystać IronPDF do generowania plików PDF w aplikacji SignalR?

IronPDF może być używany w aplikacji SignalR do generowania dokumentów PDF poprzez konwersję treści HTML. Metoda RenderHtmlAsPdf biblioteki IronPDF pozwala na płynne generowanie plików PDF, które można zintegrować z aktualizacjami w czasie rzeczywistym w SignalR.

Jakie korzyści zapewnia IronXL dla aplikacji SignalR?

IronXL wzbogaca aplikacje SignalR, umożliwiając manipulowanie plikami Excel. Pozwala to na tworzenie, odczytywanie i modyfikowanie dokumentów Excel w ramach aplikacji, zapewniając dodatkowe możliwości przetwarzania danych obok funkcji działających w czasie rzeczywistym.

Czy IronOCR można zintegrować z aplikacjami SignalR w celu rozpoznawania tekstu?

Tak, IronOCR można zintegrować z aplikacjami SignalR w celu wykonywania optycznego rozpoznawania znaków (OCR). Umożliwia to ekstrakcję tekstu z obrazów w czasie rzeczywistym, wzbogacając aplikacje o funkcje dynamicznego rozpoznawania tekstu.

Jaki jest potencjał wykorzystania IronBarcode w aplikacjach SignalR?

IronBarcode może być używany w aplikacjach SignalR do generowania i odczytywania kodów kreskowych w czasie rzeczywistym. Ta funkcjonalność jest przydatna w aplikacjach wymagających dynamicznego przetwarzania kodów kreskowych i obsługi danych w czasie rzeczywistym.

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczą...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie