Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 658|Svar: 5

[Tips] .NET/C#-processer kommunikerer mellem gRPC- og Unix-domænesockets

[Kopier link]
Opslået den 2025-8-11 kl. 20:24:04 | | | |
Krav: På samme server kommunikerer processer med hinanden ved hjælp af anonyme pipelines, navngivne pipelines, hukommelsesmappingfiler, HTTP, TCP, Standard Input/Output Streams osv. Nogle gange skal servere deploye flere applikationer, og applikationer kan faktisk kommunikere med hinanden ved hjælp af gRPC og Unix-domænesockets.

anmeldelse
.NET/C# NamedPipe-baseret NamedPipe tværproceskommunikation [med kildekode]
https://www.itsvse.com/thread-10628-1-1.html

.NET/C# forældre-barn processer kommunikerer ved hjælp af MemoryMappedFile
https://www.itsvse.com/thread-10983-1-1.html

.NET/C# forældre-barn processer kommunikerer ved brug af standard input/output-strømme
https://www.itsvse.com/thread-10982-1-1.html

Unix-domænesockets

Unix Domain Sockets (UDS), Local Sockets eller Interprocess Communication (IPC) sockets er kommunikationsendepunkter, der udveksler data mellem processer, der kører i samme Unix eller Unix-lignende operativsystem.

Navnet Unix-domænesocket refererer til domæneparameterværdien, der gives til den funktion, der skabte socket-systemets ressource. Det samme kommunikationsdomæne vælges også. [ 1 ] AF_UNIXAF_LOCAL

De gyldige parameterværdier for typeUDS er:

  • SOCK_STREAM (sammenlignet med TCP) – Bruges til stream-orienterede sockets
  • SOCK_DGRAM (sammenlignet med UDP) – en datagramorienteret socket til bevarelse af meddelelsesgrænser (som med de fleste UNIX-implementeringer er UNIX-domænedatagramsokler altid pålidelige og omarrangerer ikke datagrammer)
  • SOCK_SEQPACKET (sammenlignet med SCTP) – Sekventielle pakkesokler til forbindelser, der bevarer beskedgrænser og leverer beskeder i den rækkefølge, de sendes i


UDS-værktøjet er en standardkomponent i POSIX-operativsystemet.

Hvorfor bruge Unix-domænesockets?

Unix-domænesockets muliggør interproceskommunikation på en enkelt maskine. Så hvorfor skulle du vælge dem frem for TCP/IP? For eksempel kan du i TCP/IP bruge en loopback-adresse (localhost) til kommunikation på én server. På Windows, hvorfor skulle du vælge dem frem for Windows Naming Pipelines?

Generelt er der flere grunde til, at du kan vælge at bruge UDS i stedet for TCP/IP til interproceskommunikation:

  • Unix-domænesockets har typisk mindre overhead og hurtigere overførselshastigheder end brug af TCP/IP
  • TCP/IP-sockets er en begrænset ressource, mens Unix-domænesockets ikke har nogen faste grænser
  • Unix-domænesockets findes i filform, så det er nemt at "opdage" kendte stier
  • Integration med filsystemer tilføjer også et ekstra sikkerhedslag (hvis du ikke har adgang til filstien, kan du ikke få adgang til socketen)


Det første punkt er let at forstå – en hurtig Google vil vise, at UDS- og TCP/IP-benchmarks altid er bedre end UDS, fordi det ikke kun har betydeligt lavere latenstid, men også betydeligt højere gennemstrømning. Dette skyldes hovedsageligt, at UDS er optimeret til kommunikation med den samme server,For IP-kommunikation skal localhost gå gennem IP-stakken på både afsender- og modtagersiden

TCP/IP-sockets er en begrænset ressource; Du kan kun bruge op til 65.535 sokler ad gangen. Hvis du lægger problemet til, kan det maksimale antal sokkel, der faktisk TIME_WAIT tilgængelige, være meget færre end denne værdi. Localhost-forbindelsen bruger også sokler i denne pool. Brugen af UDS undgår klogt dette problem; Det muliggør kommunikation uden at udtømme TCP/IP-sockets.

server

Opret et nyt .NET 8-konsolprojekt, skift SDK'en til Microsoft.NET.Sdk.Web, og konfigurér det som følger:

Greet.proto er konfigureret som følger:

Koden er som følger:

Efter samlingen starter, som vist nedenfor:



kunde

Opret et nyt .NET 8-konsolprojekt og referer til følgende biblioteker:

Metoden til at kalde gRPC-grænsefladen kaldes 10 gange, og hvert kald kaldes i 200 millisekunder, og koden er som følger:

Start projektet, og efter udførelsen er fuldført, som vist i figuren nedenfor:



Henvisning:

Hyperlink-login er synlig.
Hyperlink-login er synlig.




Tidligere:Jetson (1) Jetson Orin Nano Super Udvikler Kit upakket
Næste:Webcontainer netty og tomcat sammenligning i Spring Boot
 Udlejer| Opslået den 2025-8-11 kl. 20:57:04 |
HttpClientikkegRPCog Unix-domænesocket-kommunikation

server

kunde

Som vist nedenfor:

 Udlejer| Opslået den 2025-8-12 10:05:14 |
ProtocolType.Unspecificed: Der er ikke specificeret nogen protokol, og systemet vælger den automatisk
 Udlejer| Opslået den 2025-8-12 11:02:41 |
C#-testen kan normalt forbinde til UDS


 Udlejer| Opslået den 16-9-2025 kl. 15:26:30 |
Brug af nginx til at proxy Unix-domænesockets (Ikke testet
Konfigurationen er som følger:

Prioriter UDS: Hvis din service er på samme maskine som Nginx, og du ønsker høj ydeevne og lav latenstid, er UDS det bedste valg.
 Udlejer| Opslået den 16-9-2025 kl. 17:11:05 |
Nginx reverse proxy php-fpm bruger UDS til at kommunikere
https://www.itsvse.com/thread-11068-1-1.html
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com