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:
- ASP.NET Core SDK
- Visual Studio
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
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
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>
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}`);
});
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!")
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()));
Zaawansowana komunikacja w czasie rzeczywistym
ASP.NET Core SignalR oferuje zaawansowane funkcje komunikacji w czasie rzeczywistym:
- Grupowanie połączeń: Podział połączonych klientów na grupy i wysyłanie komunikatów do określonych segmentów.
- Obsługa rozłączeń: Automatyczne zarządzanie połączeniami i rozłączeniami klientów.
- 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:
- Zainstaluj pakiet Azure SignalR SDK.
- Użyj usługi Azure Service Bus do obsługi backplane.
- Dostosuj klasę
Startupdo 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
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

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
IronXL

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

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

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

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.




