Test in einer Live-Umgebung
Test in der Produktion ohne Wasserzeichen.
Funktioniert überall, wo Sie es brauchen.
Die Socket.IO Der Server ist eine leistungsfähige Bibliothek, die die Echtzeit-, bidirektionale und ereignisgesteuerte Kommunikation ermöglicht. Es wird häufig in Webanwendungen für Aufgaben wie Chat-Anwendungen, Live-Aktualisierungen und kollaborative Plattformen verwendet. Obwohl Socket.IO typischerweise mit JavaScript in Verbindung gebracht wird, kann es auch effektiv auf der Client-Seite mit C# verwendet werden. Manchmal kann der Client ein Webbrowser sein. In diesem Artikel werden wir untersuchen, wie man einen Socket.IO-Client in einer C#-Umgebung einrichtet und verwendet. Wir werden einige einfache Beispiele durchgehen und mit den Vorteilen und potenziellen Anwendungsfällen abschließen.
Die Socket.IO Verbindung kann mit verschiedenen Low-Level-Transportmethoden hergestellt werden:
WebSockets
Öffnen Sie Visual Studio und wählen Sie im Startfenster Neues Projekt erstellen.
Um eine Konsolenanwendung in Visual Studio 2022 zu erstellen, starten Sie Visual Studio und wählen Sie im Startfenster "Create a new project" aus. Wählen Sie die Vorlage "Konsolenanwendung", konfigurieren Sie das Projekt mit einem Namen und Speicherort und stellen Sie sicher, dass .NET 6.0 ausgewählt ist.
Socket.IO, eine JavaScript-Bibliothek, ermöglicht es Web-Clients und -Servern, in Echtzeit zu kommunizieren. Es besteht aus zwei Teilen:
Um Socket.IO für .NET-Anwendungen in Visual Studio, benötigen Sie eine kompatible Server-Implementierung. Eine solche Implementierung ist das SocketIoClientDotNet für .NET, das es einem Socket IO-Client ermöglicht, von einer C#-Anwendung aus eine Verbindung zu einem Socket.IO herzustellen.
Zuerst die notwendigen NuGet-Pakete installieren. Sie können dies über die Paket-Manager-Konsole oder durch Hinzufügen der Referenzen zu Ihrer Projektdatei tun.
Install-Package SocketIoClientDotNet
Install-Package SocketIoClientDotNet
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package SocketIoClientDotNet
Die Ausführung dieses Befehls wird die Socket.IO-Client-Bibliothek in Ihr .NET-Projekt integrieren, wodurch Ihre C#-Anwendung mit einem Socket.IO-Server verbunden werden kann, um die Kommunikation zwischen Benutzern und dem System zu ermöglichen.
Bevor wir uns mit dem C#-Client beschäftigen, richten wir ein einfaches Beispiel von Socket IO mit einer .NET Core-Konsolenanwendung in Visual Studio ein. Dies wird uns helfen, die Implementierung des Clients zu testen.
Der folgende Code richtet einen grundlegenden Socket.IO-Server in C# ein, der auf Port 3000 auf Clientverbindungen hört. Wenn ein Client eine Nachricht sendet, protokolliert der Server die Nachricht und antwortet dem Client, um den Empfang zu bestätigen.
using System;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Quobject.SocketIoClientDotNet.Client;
namespace DemoApp
{
internal class Program
{
static void Main(string[] args)
{
// Connect to the Socket.IO server
var socket = IO.Socket("http://localhost:3000");
// Listen for the "connect" event
socket.On(Socket.EVENT_CONNECT, () =>
{
Console.WriteLine("Connected to the server!");
// Emit a message to the server
socket.Emit("message", "Hello from C# client!");
// Listen for messages from the server
socket.On("message", (data) =>
{
Console.WriteLine("Message from server: " + data);
});
});
// Listen for the "disconnect" event
socket.On(Socket.EVENT_DISCONNECT, () =>
{
Console.WriteLine("Disconnected from the server!");
});
// Keep the console window open
Console.ReadLine();
}
}
}
using System;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Quobject.SocketIoClientDotNet.Client;
namespace DemoApp
{
internal class Program
{
static void Main(string[] args)
{
// Connect to the Socket.IO server
var socket = IO.Socket("http://localhost:3000");
// Listen for the "connect" event
socket.On(Socket.EVENT_CONNECT, () =>
{
Console.WriteLine("Connected to the server!");
// Emit a message to the server
socket.Emit("message", "Hello from C# client!");
// Listen for messages from the server
socket.On("message", (data) =>
{
Console.WriteLine("Message from server: " + data);
});
});
// Listen for the "disconnect" event
socket.On(Socket.EVENT_DISCONNECT, () =>
{
Console.WriteLine("Disconnected from the server!");
});
// Keep the console window open
Console.ReadLine();
}
}
}
Imports System
Imports System.Net.WebSockets
Imports System.Text
Imports System.Threading
Imports System.Threading.Tasks
Imports Quobject.SocketIoClientDotNet.Client
Namespace DemoApp
Friend Class Program
Shared Sub Main(ByVal args() As String)
' Connect to the Socket.IO server
Dim socket = IO.Socket("http://localhost:3000")
' Listen for the "connect" event
socket.On(Socket.EVENT_CONNECT, Sub()
Console.WriteLine("Connected to the server!")
' Emit a message to the server
socket.Emit("message", "Hello from C# client!")
' Listen for messages from the server
socket.On("message", Sub(data)
Console.WriteLine("Message from server: " & data)
End Sub)
End Sub)
' Listen for the "disconnect" event
socket.On(Socket.EVENT_DISCONNECT, Sub()
Console.WriteLine("Disconnected from the server!")
End Sub)
' Keep the console window open
Console.ReadLine()
End Sub
End Class
End Namespace
Im Ausschnitt erstellen wir zunächst eine Socket.IO-Clientinstanz/-sender, indem wir IO.Socket aufrufen.("https://localhost:3000"), die sich mit dem lokalen Server verbindet, der auf Port 3000 auf dem Client-Computer läuft.
Bei erfolgreicher Verbindung (Socket.EVENT_CONNECT), drucken wir eine Nachricht, die anzeigt, dass wir mit dem Server verbunden sind.
Dann senden wir eine Nachricht von einem Client an den Server, indem wir socket.Emit verwenden.("Nachricht", "Hallo vom C#-Client!"). Dies sendet eine Nachricht mit dem Inhalt "Hallo vom C#-Client!„zum Server.“
Als nächstes hören wir auf Nachrichten vom Server, indem wir einen Callback für das "message"-Ereignis mit socket.On registrieren.("Nachricht" (daten) => { ... }). Wenn der Server ein "message"-Ereignis sendet, wird die Callback-Funktion aufgerufen und wir drucken die empfangene Nachricht in die Konsole.
Wenn die Verbindung zum Server vom Client getrennt wird (Socket.EVENT_DISCONNECT), drucken wir eine Nachricht zur Anzeige der Trennung.
Schließlich die Console.ReadLine() Methode hält das Konsolenfenster offen, damit das Programm nicht sofort nach der Ausführung beendet wird. Dadurch können wir die Ausgabe sehen und sicherstellen, dass das Programm nicht vorzeitig beendet wird.
Langzeitabfrage ist eine in der Webentwicklung verwendete Technik, die eine Bibliothek verwendet, um Nachrichten zwischen einem Client zu senden. (normalerweise ein Webbrowser) und ein Server. Es ermöglicht Echtzeitkommunikation, indem Ereignisse auf dem Server ausgelöst werden, die dann vom Client ohne ständiges Abfragen empfangen werden können. Diese Methode ist besonders nützlich für Anwendungen, die sofortige Aktualisierungen erfordern, wie zum Beispiel Chat-Anwendungen oder Börsenticker.
WebSocket ermöglicht bidirektionale Kommunikation, indem es voll-duplex Kommunikationskanäle über eine einzelne TCP-Verbindung einrichtet. Dieses Protokoll ermöglicht die Echtzeit-Interaktion zwischen einem Client, typischerweise einem Webbrowser, und einem Server, wodurch beide Parteien in der Lage sind, Nachrichten asynchron auszutauschen.
Der Client sendet eine WebSocket-Handshake-Anfrage an den Server, um seinen Wunsch nach einer WebSocket-Verbindung zu signalisieren. Nach Erhalt der Handshake-Anfrage antwortet der Server mit einer WebSocket-Handshake-Antwort, die anzeigt, dass die Verbindung erfolgreich hergestellt wurde. Die über die WebSocket-Verbindung gesendeten Nachrichten können in jedem Format vorliegen. (z. B. Text oder Binär) und können asynchron gesendet und empfangen werden.
Web Transport, als ein hochmodernes Protokoll, führt zusätzliche Funktionen ein, um die Webkommunikation über die Einschränkungen traditioneller Protokolle wie TCP und UDP hinaus zu verbessern. Durch die Nutzung von UDP und QUIC behebt es die Mängel seiner Vorgänger und macht es benutzerfreundlicher und effizienter. Für die Benutzer bedeutet dies eine reduzierte Latenz und verbesserte Staukontrolle, was letztlich zu einem reibungsloseren und reaktionsfähigeren Web-Erlebnis führt. Darüber hinaus bietet Web Transport bessere Sicherheitsmaßnahmen, die eine sicherere Datenübertragung im Vergleich zu TCP gewährleisten. Mit diesen Fortschritten mindert Web Transport die zeitraubenden Aspekte der Datenübertragung und optimiert die Gesamtleistung sowohl für Clients als auch für Server.
Hier ist ein einfaches Beispiel dafür, wie Web Transport in einer Webanwendung verwendet werden kann:
using System;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace SocketIO.Demo
{
class Program
{
static async Task Main(string[] args)
{
// The WebSocket URI
string uri = "wss://echo.websocket.org";
// Creating a new WebSocket connection
using (ClientWebSocket webSocket = new ClientWebSocket())
{
await webSocket.ConnectAsync(new Uri(uri), CancellationToken.None);
Console.WriteLine("Connected to the server");
// Sending data over the WebSocket
byte[] sendBuffer = new byte[] { 1, 2, 3, 4 };
await webSocket.SendAsync(new ArraySegment<byte>(sendBuffer), WebSocketMessageType.Binary, true, CancellationToken.None);
Console.WriteLine("Data sent to the server");
// Receiving data from the WebSocket
byte[] receiveBuffer = new byte[1024];
WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
byte[] data = new byte[result.Count];
Array.Copy(receiveBuffer, data, result.Count);
Console.WriteLine("Received data: " + BitConverter.ToString(data));
}
}
}
}
using System;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace SocketIO.Demo
{
class Program
{
static async Task Main(string[] args)
{
// The WebSocket URI
string uri = "wss://echo.websocket.org";
// Creating a new WebSocket connection
using (ClientWebSocket webSocket = new ClientWebSocket())
{
await webSocket.ConnectAsync(new Uri(uri), CancellationToken.None);
Console.WriteLine("Connected to the server");
// Sending data over the WebSocket
byte[] sendBuffer = new byte[] { 1, 2, 3, 4 };
await webSocket.SendAsync(new ArraySegment<byte>(sendBuffer), WebSocketMessageType.Binary, true, CancellationToken.None);
Console.WriteLine("Data sent to the server");
// Receiving data from the WebSocket
byte[] receiveBuffer = new byte[1024];
WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
byte[] data = new byte[result.Count];
Array.Copy(receiveBuffer, data, result.Count);
Console.WriteLine("Received data: " + BitConverter.ToString(data));
}
}
}
}
Imports System
Imports System.Net.WebSockets
Imports System.Text
Imports System.Threading
Imports System.Threading.Tasks
Namespace SocketIO.Demo
Friend Class Program
Shared Async Function Main(ByVal args() As String) As Task
' The WebSocket URI
Dim uri As String = "wss://echo.websocket.org"
' Creating a new WebSocket connection
Using webSocket As New ClientWebSocket()
Await webSocket.ConnectAsync(New Uri(uri), CancellationToken.None)
Console.WriteLine("Connected to the server")
' Sending data over the WebSocket
Dim sendBuffer() As Byte = { 1, 2, 3, 4 }
Await webSocket.SendAsync(New ArraySegment(Of Byte)(sendBuffer), WebSocketMessageType.Binary, True, CancellationToken.None)
Console.WriteLine("Data sent to the server")
' Receiving data from the WebSocket
Dim receiveBuffer(1023) As Byte
Dim result As WebSocketReceiveResult = Await webSocket.ReceiveAsync(New ArraySegment(Of Byte)(receiveBuffer), CancellationToken.None)
Dim data(result.Count - 1) As Byte
Array.Copy(receiveBuffer, data, result.Count)
Console.WriteLine("Received data: " & BitConverter.ToString(data))
End Using
End Function
End Class
End Namespace
In diesem Beispiel erstellen wir zunächst eine neue WebTransport-Verbindung zu einem Server unter Verwendung einer WebSocket-URL. (wss://echo.websocket.org). Dann erstellen wir einen bidirektionalen Stream über die Verbindung und senden einige Daten. ([1, 2, 3, 4]) über den Bach. Schließlich lesen wir Daten aus dem Stream und protokollieren sie in der Konsole.
Wenn Sie die Anwendung mit dem WebSocket-Echo-Server ausführen, sollte die Ausgabe in etwa so aussehen:
Moderne Alternative: Web Transport bietet eine moderne Alternative zu traditionellen Webkommunikationsprotokollen wie TCP und UDP.
Effiziente Datenübertragung: Es bietet eine effiziente Datenübertragung durch die Nutzung von multiplexerten Streams und erweiterten Funktionen.
Hohe Leistung: Gut geeignet für den Aufbau leistungsstarker Webanwendungen, die niedrige Latenzzeiten und zuverlässige Datenübertragung verlangen.
Multiplexe Streams: Unterstützt multiplexe Streams, die es ermöglichen, mehrere Datenströme gleichzeitig über eine einzelne Verbindung zu senden und zu empfangen.
Innovation: Da Webentwickler weiterhin Web Transport übernehmen, können wir mehr Innovation bei Webkommunikationsprotokollen erwarten.
Verbesserte Benutzererfahrung: Die Einführung von Web Transport kann zu verbesserten Benutzererfahrungen im Web führen, da Daten schneller und zuverlässiger übertragen werden.
IronPDF ist eine umfassende .NET PDF-Bibliothek, die speziell für Entwickler entwickelt wurde, die mit C# arbeiten. Dieses leistungsstarke Werkzeug ermöglicht es Entwicklern mühelos erstellen, manipulierenund lesen PDF-Dateien in ihren Anwendungen. Mit IronPDF können Entwickler PDF-Dokumente aus HTML-Zeichenfolgen, HTML-Dateienund URLs, was es für verschiedene Anwendungsfälle äußerst vielseitig macht. Darüber hinaus bietet IronPDF erweiterte PDF-Bearbeitungsfunktionen wie das Hinzufügen von Kopfzeilen, Fußzeilen, Wasserzeichen und vieles mehr. Die nahtlose Integration in C#-Projekte über den NuGet-Paketmanager vereinfacht den Umgang mit PDF-Dateien, rationalisiert die Entwicklung und steigert die Produktivität.
Installieren Sie IronPDF in Visual Studio oder über die Befehlszeile mit dem NuGet-Paket-Manager. In Visual Studio, gehen Sie zur Konsole:
Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package IronPdf
Hier ist ein einfaches Beispiel mit IronPDF Um Bits-Daten in eine PDF-Datei zu konvertieren, rufen Sie die Methode GeneratePDF in der Main-Methode auf und übergeben Sie die Daten als Parameter, die wir im obigen Beispiel hatten.
using System;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace SocketIO.Demo
{
class Program
{
static async Task Main(string[] args)
{
// The WebSocket URI
string uri = "wss://echo.websocket.org";
// Creating a new WebSocket connection
using (ClientWebSocket webSocket = new ClientWebSocket())
{
await webSocket.ConnectAsync(new Uri(uri), CancellationToken.None);
Console.WriteLine("Connected to the server");
// Sending data over the WebSocket
byte[] sendBuffer = new byte[] { 1, 2, 3, 4 };
await webSocket.SendAsync(new ArraySegment<byte>(sendBuffer), WebSocketMessageType.Binary, true, CancellationToken.None);
Console.WriteLine("Data sent to the server");
// Receiving data from the WebSocket
byte[] receiveBuffer = new byte[1024];
WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
byte[] data = new byte[result.Count];
Array.Copy(receiveBuffer, data, result.Count);
Console.WriteLine("Received data: " + BitConverter.ToString(data));
// Data to Generate in PDF File
string pdfData = BitConverter.ToString(data);
PDFGenerator.GeneratePDF(pdfData);
}
}
}
}
using System;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace SocketIO.Demo
{
class Program
{
static async Task Main(string[] args)
{
// The WebSocket URI
string uri = "wss://echo.websocket.org";
// Creating a new WebSocket connection
using (ClientWebSocket webSocket = new ClientWebSocket())
{
await webSocket.ConnectAsync(new Uri(uri), CancellationToken.None);
Console.WriteLine("Connected to the server");
// Sending data over the WebSocket
byte[] sendBuffer = new byte[] { 1, 2, 3, 4 };
await webSocket.SendAsync(new ArraySegment<byte>(sendBuffer), WebSocketMessageType.Binary, true, CancellationToken.None);
Console.WriteLine("Data sent to the server");
// Receiving data from the WebSocket
byte[] receiveBuffer = new byte[1024];
WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
byte[] data = new byte[result.Count];
Array.Copy(receiveBuffer, data, result.Count);
Console.WriteLine("Received data: " + BitConverter.ToString(data));
// Data to Generate in PDF File
string pdfData = BitConverter.ToString(data);
PDFGenerator.GeneratePDF(pdfData);
}
}
}
}
Imports System
Imports System.Net.WebSockets
Imports System.Text
Imports System.Threading
Imports System.Threading.Tasks
Namespace SocketIO.Demo
Friend Class Program
Shared Async Function Main(ByVal args() As String) As Task
' The WebSocket URI
Dim uri As String = "wss://echo.websocket.org"
' Creating a new WebSocket connection
Using webSocket As New ClientWebSocket()
Await webSocket.ConnectAsync(New Uri(uri), CancellationToken.None)
Console.WriteLine("Connected to the server")
' Sending data over the WebSocket
Dim sendBuffer() As Byte = { 1, 2, 3, 4 }
Await webSocket.SendAsync(New ArraySegment(Of Byte)(sendBuffer), WebSocketMessageType.Binary, True, CancellationToken.None)
Console.WriteLine("Data sent to the server")
' Receiving data from the WebSocket
Dim receiveBuffer(1023) As Byte
Dim result As WebSocketReceiveResult = Await webSocket.ReceiveAsync(New ArraySegment(Of Byte)(receiveBuffer), CancellationToken.None)
Dim data(result.Count - 1) As Byte
Array.Copy(receiveBuffer, data, result.Count)
Console.WriteLine("Received data: " & BitConverter.ToString(data))
' Data to Generate in PDF File
Dim pdfData As String = BitConverter.ToString(data)
PDFGenerator.GeneratePDF(pdfData)
End Using
End Function
End Class
End Namespace
using IronPdf;
namespace SocketIO.Demo
{
public class PDFGenerator
{
public static void GeneratePDF(string data)
{
IronPdf.License.LicenseKey = "Your-Licence-Key-Here";
Console.WriteLine("PDF Generating Started...");
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
Console.WriteLine("PDF Processing ....");
var pdf = renderer.RenderHtmlAsPdf(data);
string filePath = "Data.pdf";
pdf.SaveAs(filePath);
Console.WriteLine($"PDF Generation Completed,File Saved as ${filePath}");
}
}
}
using IronPdf;
namespace SocketIO.Demo
{
public class PDFGenerator
{
public static void GeneratePDF(string data)
{
IronPdf.License.LicenseKey = "Your-Licence-Key-Here";
Console.WriteLine("PDF Generating Started...");
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
Console.WriteLine("PDF Processing ....");
var pdf = renderer.RenderHtmlAsPdf(data);
string filePath = "Data.pdf";
pdf.SaveAs(filePath);
Console.WriteLine($"PDF Generation Completed,File Saved as ${filePath}");
}
}
}
Imports IronPdf
Namespace SocketIO.Demo
Public Class PDFGenerator
Public Shared Sub GeneratePDF(ByVal data As String)
IronPdf.License.LicenseKey = "Your-Licence-Key-Here"
Console.WriteLine("PDF Generating Started...")
' Instantiate Renderer
Dim renderer = New ChromePdfRenderer()
Console.WriteLine("PDF Processing ....")
Dim pdf = renderer.RenderHtmlAsPdf(data)
Dim filePath As String = "Data.pdf"
pdf.SaveAs(filePath)
Console.WriteLine($"PDF Generation Completed,File Saved as ${filePath}")
End Sub
End Class
End Namespace
Im bereitgestellten Code wird IronPDF verwendet, um ein PDF-Dokument aus einem über eine WebSocket-Verbindung empfangenen Hexadezimal-String zu erzeugen. Die GeneratePDF-Methode initialisiert IronPDF mit einem Lizenzschlüssel und verwendet die ChromePdfRenderer-Instanz, um die hexadezimale Zeichenfolge als HTML-Inhalt in ein PDF zu rendern, indem die RenderHtmlAsPdf-Methode eingesetzt wird. Sie können Ihren kostenlosen Lizenzschlüssel von hier. Dieses PDF wird dann lokal als "Data.pdf" mit der SaveAs-Methode gespeichert. Die Integration von IronPDF ermöglicht die nahtlose Umwandlung von dynamischen WebSocket-Daten in ein strukturiertes PDF-Format und demonstriert damit seine Nützlichkeit bei der Umwandlung von Echtzeit-Datenströmen in Archivdokumente.
Nutzung Socket.IO mit C# bietet zahlreiche Möglichkeiten für Echtzeitinteraktionen mit verbundenen Clients, die über den Bereich von JavaScript und Node.js hinausgehen. Integrieren von Tools wie Socket.IO und IronPDF in Ihre .NET-Projekte kann die Echtzeitkommunikation und die PDF-Verarbeitungsfähigkeiten erheblich verbessern. Socket.IO ermöglicht nahtlose, bidirektionale Echtzeitkommunikation zwischen Clients und Servern, während IronPDF robuste Funktionen für erstellung von und manipulieren PDF-Dokumente mühelos.
IronPDF um sein volles Potenzial freizuschalten und eine effiziente und zuverlässige PDF-Erstellung und -Manipulation in Ihren C#-Anwendungen sicherzustellen.
9 .NET API-Produkte für Ihre Bürodokumente