Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 658|Antwort: 5

[Tipps] .NET/C#-Prozesse kommunizieren zwischen gRPC- und Unix-Domänensockets

[Link kopieren]
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
.NET/C# NamedPipe-basierte NamedPipe-Cross-Process-Kommunikation [mit Quellcode]
https://www.itsvse.com/thread-10628-1-1.html

.NET/C#-Eltern-Kind-Prozesse kommunizieren über MemoryMappedFile
https://www.itsvse.com/thread-10983-1-1.html

.NET/C#-Eltern-Kind-Prozesse kommunizieren über Standard-Eingabe-/Ausgabeströme
https://www.itsvse.com/thread-10982-1-1.html

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 ungepackt
Nächster:Web-Container-Netty- und Tomcat-Vergleich in Spring Boot
 Vermieter| Veröffentlicht am 11.08.2025, 20:57:04 |
HttpClientnichtgRPCund Unix-Domänen-Socket-Kommunikation

Server

Kunde

Wie unten gezeigt:

 Vermieter| Veröffentlicht am 12.8.2025, 10:05:14 |
ProtocolType.Unspecified: Es ist kein Protokoll angegeben, und das System wählt es automatisch aus
 Vermieter| Veröffentlicht am 12.8.2025, 11:02:41 |
Der C#-Test kann sich normal mit UDS verbinden


 Vermieter| Veröffentlicht am 16.09.2025, 15:26:30 |
Verwendung von nginx zum Proxy von Unix-Domänensockets (Nicht getestet
Die Konfiguration ist wie folgt:

Priorisieren Sie UDS: Wenn Ihr Dienst auf demselben Rechner wie Nginx läuft und Sie hohe Leistung und niedrige Latenz suchen, ist UDS die beste Wahl.
 Vermieter| Veröffentlicht am 16.9.2025, 17:11:05 |
Der Nginx Reverse Proxy php-fpm verwendet UDS zur Kommunikation
https://www.itsvse.com/thread-11068-1-1.html
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com