Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 658|Svar: 5

[Tips] .NET/C#-processer kommunicerar mellan gRPC- och Unix-domänsocklar

[Kopiera länk]
Publicerad den 2025-8-11 20:24:04 | | | |
Krav: På samma server kommunicerar processer med varandra via anonyma pipelines, namngivna pipelines, minnesmappningsfiler, HTTP, TCP, Standard Input/Output Streams, etc. Ibland behöver servrar distribuera flera applikationer, och applikationer kan faktiskt kommunicera med varandra via gRPC- och Unix-domänsocklar.

recension
.NET/C# NamedPipe-baserad NamedPipe tvärprocesskommunikation [med källkod]
https://www.itsvse.com/thread-10628-1-1.html

.NET/C#-föräldra-barn-processer kommunicerar med hjälp av MemoryMappedFile
https://www.itsvse.com/thread-10983-1-1.html

.NET/C#-föräldra-barn-processer kommunicerar med standardin-/utmatningsströmmar
https://www.itsvse.com/thread-10982-1-1.html

Unix-domänsocklar

Unix domänsocklar (UDS), lokala sockets eller Interprocess Communication (IPC) socklar är kommunikationsändpunkter som utbyter data mellan processer som körs i samma Unix- eller Unix-liknande operativsystem.

Namnet Unix-domänsocket syftar på domänparametervärdet som skickas till funktionen som skapade socketsystemets resurs. Samma kommunikationsdomän väljs också. [ 1 ] AF_UNIXAF_LOCAL

De giltiga parametervärdena för typeUDS är:

  • SOCK_STREAM (jämfört med TCP) – Används för strömorienterade sockets
  • SOCK_DGRAM (jämfört med UDP) – en datagramorienterad socket för att bevara meddelandegränser (som med de flesta UNIX-implementationer är UNIX-domänens datagramsocklar alltid pålitliga och omordnar inte datagram)
  • SOCK_SEQPACKET (jämfört med SCTP) – Sekventiella paketsocklar för anslutningar som bevarar meddelandegränser och levererar meddelanden i den ordning de skickas i


UDS-verktyget är en standardkomponent i operativsystemet POSIX.

Varför använda Unix-domänsocklar?

Unix-domänsocklar möjliggör kommunikation mellan processer på en enda maskin. Så varför skulle du välja dem framför TCP/IP? Till exempel kan du i TCP/IP använda en loopback-adress (localhost) för kommunikation mellan en och en enda server. På Windows, varför skulle du välja dem framför Windows Naming Pipelines?

Generellt finns det flera anledningar till varför du kan välja att använda UDS istället för TCP/IP för kommunikation mellan processer:

  • Unix-domänsocklar har vanligtvis mindre overhead och snabbare överföringshastigheter än att använda TCP/IP
  • TCP/IP-sockets är en ändlig resurs, medan Unix-domänsocketar inte har några hårda gränser
  • Unix-domänsocklar finns i filform, så det är lätt att "upptäcka" kända vägar
  • Integration med filsystem tillför också ett extra säkerhetslager (om du inte har tillgång till filsökvägen kan du inte komma åt socketen)


Den första punkten är lätt att förstå – en snabb Google-sökning visar att UDS- och TCP/IP-benchmarks alltid är bättre än UDS eftersom det inte bara har betydligt lägre latens utan också betydligt högre genomströmning. Detta beror främst på att UDS är optimerat för kommunikation med samma server,För IP-kommunikation måste localhost gå genom IP-stacken på både sändar- och mottagarsidan

TCP/IP-sockets är en ändlig resurs; Du kan bara använda upp till 65 535 uttag åt gången. Om du lägger till problemet kan det maximala antalet uttag som faktiskt TIME_WAIT tillgängliga vara mycket mindre än detta värde. Localhost-anslutningen förbrukar också sockets i denna pool. Att använda UDS undviker smart detta problem; Den möjliggör kommunikation utan att uttömma TCP/IP-sockets.

server

Skapa ett nytt .NET 8-konsolprojekt, byt SDK till Microsoft.NET.Sdk.Web och konfigurera det enligt följande:

Greet.proto är konfigurerat enligt följande:

Koden är följande:

Efter att samlingen startar, som visas nedan:



klient

Skapa ett nytt .NET 8-konsolprojekt och referera till följande bibliotek:

Metoden för att anropa gRPC-gränssnittet anropas 10 gånger, och varje anrop anropas i 200 millisekunder, och koden är följande:

Starta projektet, och efter att genomförandet är slutfört, som visas i figuren nedan:



Hänvisning:

Inloggningen med hyperlänken är synlig.
Inloggningen med hyperlänken är synlig.




Föregående:Jetson (1) Jetson Orin Nano Super Developer Kit opaketerat
Nästa:Jämförelse av nättare och hankatter i Spring Boot
 Hyresvärd| Publicerad den 2025-8-11 20:57:04 |
HttpClientintegRPCoch Unix-domänsocketkommunikation.

server

klient

Som visas nedan:

 Hyresvärd| Publicerad den 2025-8-12 10:05:14 |
ProtocolType.Unspecificed: Inget protokoll specificeras, och systemet väljer det automatiskt
 Hyresvärd| Publicerad den 2025-8-12 11:02:41 |
C#-testet kan ansluta till UDS normalt


 Hyresvärd| Publicerad den 2025-9-16 15:26:30 |
Att använda nginx för att proxy Unix-domänsocklar (Inte testad
Konfigurationen är följande:

Prioritera UDS: Om din tjänst är på samma maskin som Nginx och du vill ha hög prestanda och låg latens är UDS det bästa valet.
 Hyresvärd| Publicerad den 2025-9-16 17:11:05 |
Nginx reverse proxy php-fpm använder UDS för att kommunicera
https://www.itsvse.com/thread-11068-1-1.html
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com