|
|
Veröffentlicht am 11.8.2025, 20:24:04
|
|
|
|

Anforderungen: Auf demselben Server kommunizieren Prozesse miteinander über anonyme Pipelines, benannte Pipelines, Speichermapping-Dateien, HTTP, TCP, Standard-Eingabe-/Ausgabeströme usw. Manchmal müssen Server mehrere Anwendungen bereitstellen, und Anwendungen können tatsächlich miteinander kommunizieren, indem sie gRPC- und Unix-Domänensockets verwenden.
Rezension
Unix-Domänensockets
Unix-Domänen-Sockets (UDS), lokale Sockets oder Interprozesskommunikations-(IPC)-Sockets sind Kommunikationsendpunkte, die Daten zwischen Prozessen austauschen, die im selben Unix- oder Unix-ähnlichen Betriebssystem laufen.
Der Name Unix-Domänensocket bezieht sich auf den Domänenparameterwert, der an die Funktion übergeben wird, die die Socket-Systemressource erstellt hat. Die gleiche Kommunikationsdomäne wird ebenfalls ausgewählt. [ 1 ] AF_UNIXAF_LOCAL
Die gültigen Parameterwerte für typeUDS sind:
- SOCK_STREAM (im Vergleich zu TCP) – Verwendet für stromorientierte Sockets
- SOCK_DGRAM (im Vergleich zu UDP) – ein datagrammorientierter Socket zur Erhaltung von Nachrichtengrenzen (wie bei den meisten UNIX-Implementierungen sind UNIX-Domänen-Datagramm-Sockets immer zuverlässig und ordnen die Datagramme nicht um)
- SOCK_SEQPACKET (im Vergleich zu SCTP) – Sequentielle Paket-Sockets für Verbindungen, die Nachrichtengrenzen erhalten und Nachrichten in der Reihenfolge ihres Versands zustellen
Das UDS-Tool ist eine Standardkomponente des POSIX-Betriebssystems.
Warum Unix-Domänensockets verwenden?
Unix-Domänensockets ermöglichen die Kommunikation zwischen Prozessen auf einer einzigen Maschine. Warum solltest du sie also TCP/IP vorziehen? Zum Beispiel kann man in TCP/IP eine Loopback-Adresse (localhost) für die Kommunikation mit einem einzelnen Server verwenden. Warum sollte man unter Windows diese gegenüber Windows Naming Pipelines wählen?
Im Allgemeinen gibt es mehrere Gründe, warum Sie für die Kommunikation zwischen Prozessen UDS statt TCP/IP verwenden könnten:
- Unix-Domänensockets haben typischerweise weniger Overhead und schnellere Übertragungsgeschwindigkeiten als die Verwendung von TCP/IP
- TCP/IP-Sockets sind eine endliche Ressource, während Unix-Domänensockets keine festen Grenzen haben
- Unix-Domänensockets gibt es in Dateiform, sodass es leicht ist, bekannte Pfade zu "entdecken"
- Die Integration mit Dateisystemen fügt auch eine zusätzliche Sicherheitsebene hinzu (wenn du keinen Zugriff auf den Dateipfad hast, kannst du nicht auf den Socket zugreifen).
Der erste Punkt ist leicht verständlich – eine schnelle Google-Suche zeigt, dass UDS- und TCP/IP-Benchmarks immer besser sind als UDS, weil sie nicht nur deutlich geringere Latenz, sondern auch deutlich höheren Durchsatz haben. Dies liegt hauptsächlich daran, dass UDS für die Kommunikation mit demselben Server optimiert ist.Für IP-Kommunikation muss der lokale Host sowohl auf der Sender- als auch auf der Empfängerseite über den IP-Stack laufen。
TCP/IP-Sockets sind eine endliche Ressource; Man kann jeweils nur bis zu 65.535 Sockeln verwenden. Wenn du das Problem hinzufügst, kann die maximale Anzahl der tatsächlich verfügbaren TIME_WAIT Sockeln deutlich geringer sein als dieser Wert. Die Localhost-Verbindung verbraucht ebenfalls Sockets in diesem Pool. Die Verwendung von UDS vermeidet dieses Problem geschickt; Es ermöglicht die Kommunikation, ohne TCP/IP-Sockets zu erschöpfen.
Server
Erstellen Sie ein neues .NET 8-Konsolenprojekt, ändern Sie das SDK zu Microsoft.NET.Sdk.Web und konfigurieren Sie es wie folgt:
Greet.proto ist wie folgt konfiguriert:
Der Code lautet wie folgt:
Nach Beginn der Zusammenstellung, wie unten gezeigt:
Kunde
Erstellen Sie ein neues .NET 8-Konsolenprojekt und beziehen Sie sich auf die folgenden Bibliotheken:
Die Methode zum Aufrufen der gRPC-Schnittstelle wird zehnmal aufgerufen, jeder Aufruf wird 200 Millisekunden lang aufgerufen; der Code lautet wie folgt:
Starten Sie das Projekt und nachdem die Ausführung abgeschlossen ist, wie in der untenstehenden Abbildung gezeigt:
Referenz:
Der Hyperlink-Login ist sichtbar.
Der Hyperlink-Login ist sichtbar. |
Vorhergehend:Jetson (1) Jetson Orin Nano Super Developer Kit ungepacktNächster:Web-Container-Netty- und Tomcat-Vergleich in Spring Boot
|