Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 658|Antwoord: 5

[Tips] .NET/C#-processen communiceren tussen gRPC- en Unix-domeinsockets

[Link kopiëren]
Geplaatst op 11-8-2025 20:24:04 | | | |
Vereisten: Op dezelfde server communiceren processen met elkaar via anonieme pijplijnen, benoemde pijplijnen, geheugenmappingbestanden, HTTP, TCP, standaard invoer-/uitvoerstromen, enzovoort. Soms moeten servers meerdere applicaties deployen, en applicaties kunnen daadwerkelijk met elkaar communiceren via gRPC- en Unix-domeinsockets.

recensie
.NET/C# NamedPipe-gebaseerde NamedPipe Cross-Process Communicatie [met broncode]
https://www.itsvse.com/thread-10628-1-1.html

.NET/C# ouder-kindprocessen communiceren met MemoryMappedFile
https://www.itsvse.com/thread-10983-1-1.html

.NET/C# ouder-kindprocessen communiceren met standaard input/output-stromen
https://www.itsvse.com/thread-10982-1-1.html

Unix-domeinsockets

Unix Domain Sockets (UDS), Local Sockets of Interprocess Communication (IPC) sockets zijn communicatie-endpoints die gegevens uitwisselen tussen processen die draaien op hetzelfde Unix- of Unix-achtige besturingssysteem.

De naam Unix-domeinsocket verwijst naar de domeinparameterwaarde die wordt doorgegeven aan de functie die de socketsysteemresource heeft aangemaakt. Hetzelfde communicatiedomein wordt ook geselecteerd. [ 1 ] AF_UNIXAF_LOCAL

De geldige parameterwaarden voor typeUDS zijn:

  • SOCK_STREAM (vergeleken met TCP) – Gebruikt voor stream-oriented sockets
  • SOCK_DGRAM (vergeleken met UDP) – een datagram-georiënteerde socket voor het behouden van berichtgrenzen (zoals bij de meeste UNIX-implementaties zijn UNIX-domein-datagramsockets altijd betrouwbaar en herschikken ze datagrammen niet)
  • SOCK_SEQPACKET (vergeleken met SCTP) – Sequentiële packet sockets voor verbindingen die berichtgrenzen behouden en berichten afleveren in de volgorde waarin ze worden verzonden


De UDS-tool is een standaardcomponent van het POSIX-besturingssysteem.

Waarom Unix-domeinsockets gebruiken?

Unix-domeinsockets maken interprocescommunicatie op één machine mogelijk. Waarom zou je dan voor hen kiezen boven TCP/IP? Bijvoorbeeld, in TCP/IP kun je een loopback-adres (localhost) gebruiken voor communicatie met één server. Waarom zou je op Windows voor hen kiezen boven Windows Naming Pipelines?

Over het algemeen zijn er verschillende redenen waarom je ervoor zou kunnen kiezen om UDS te gebruiken in plaats van TCP/IP voor interprocescommunicatie:

  • Unix-domeinsockets hebben doorgaans minder overhead en snellere overdrachtssnelheden dan het gebruik van TCP/IP
  • TCP/IP-sockets zijn een eindige bron, terwijl Unix-domeinsockets geen harde limieten kennen
  • Unix-domeinsockets zijn er in bestandsvorm, dus het is makkelijk om bekende paden te "ontdekken"
  • Integratie met bestandssystemen voegt ook een extra beveiligingslaag toe (als je geen toegang hebt tot het bestandspad, kun je de socket niet bereiken)


Het eerste punt is makkelijk te begrijpen - een snelle Google laat zien dat UDS- en TCP/IP-benchmarks altijd beter zijn dan UDS omdat het niet alleen aanzienlijk lagere latentie heeft, maar ook aanzienlijk hogere doorvoersnelheid. Dit komt vooral doordat UDS geoptimaliseerd is voor communicatie met dezelfde server.Voor IP-communicatie moet localhost via de IP-stack aan zowel de zender- als ontvangerzijde gaan

TCP/IP-sockets zijn een eindige bron; Je kunt maar tot 65.535 sockets tegelijk gebruiken. Als je het probleem erbij optelt, kan het maximale aantal stopcontacten dat daadwerkelijk beschikbaar TIME_WAIT veel minder zijn dan deze waarde. De localhost-verbinding verbruikt ook sockets in deze pool. Het gebruik van UDS vermijdt dit probleem op slimme wijze; Het maakt communicatie mogelijk zonder TCP/IP-sockets uit te putten.

server

Maak een nieuw .NET 8 consoleproject, verander de SDK naar Microsoft.NET.Sdk.Web en configureer het als volgt:

Greet.proto is als volgt geconfigureerd:

De code is als volgt:

Na de start van de compilatie, zoals hieronder getoond:



klant

Maak een nieuw .NET 8 consoleproject aan en verwijs naar de volgende bibliotheken:

De methode om de gRPC-interface aan te roepen wordt 10 keer aangeroepen, en elke oproep wordt 200 milliseconden lang aangeroepen, en de code is als volgt:

Begin het project, en nadat de uitvoering is afgerond, zoals weergegeven in de onderstaande figuur:



Referentie:

De hyperlink-login is zichtbaar.
De hyperlink-login is zichtbaar.




Vorig:Jetson (1) Jetson Orin Nano Super Ontwikkelaar Kit uitgepakt
Volgend:Webcontainer netty en tomcat vergelijking in Spring Boot
 Huisbaas| Geplaatst op 11-8-2025 20:57:04 |
HttpClientnietgRPCen Unix-domeinsocketcommunicatie

server

klant

Zoals hieronder getoond:

 Huisbaas| Geplaatst op 2025-8-12 10:05:14 |
ProtocolType.Unspecified: Er wordt geen protocol gespecificeerd, en het systeem selecteert het automatisch
 Huisbaas| Geplaatst op 2025-8-12 11:02:41 |
De c#-test kan normaal verbinding maken met UDS


 Huisbaas| Geplaatst op 16-9-2025 15:26:30 |
Nginx gebruiken om Unix-domeinsockets te proxyen (Niet getest
De configuratie is als volgt:

Prioriteer UDS: Als je dienst op dezelfde machine als Nginx staat en je op zoek bent naar hoge prestaties en lage latency, is UDS de beste keuze.
 Huisbaas| Geplaatst op 16-9-2025 17:11:05 |
De Nginx reverse proxy php-fpm gebruikt UDS om te communiceren
https://www.itsvse.com/thread-11068-1-1.html
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com