Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 658|Vastaus: 5

[Vinkkejä] .NET/C#-prosessit kommunikoivat gRPC- ja Unix-domain-sokettien välillä

[Kopioi linkki]
Julkaistu 2025-8-11 20:24:04 | | | |
Vaatimukset: Samalla palvelimella prosessit kommunikoivat keskenään anonyymien putkien, nimettyjen putkien, muistikartoitustiedostojen, HTTP:n, TCP:n, Standard Input/Output -virtojen jne. avulla. Joskus palvelimien täytyy ottaa käyttöön useita sovelluksia, ja sovellukset voivat itse asiassa kommunikoida keskenään gRPC- ja Unix-verkkotunnuksen sokettien avulla.

arvostelu
.NET/C# NamedPipe-pohjainen NamedPipe-prosessien välinen viestintä [lähdekoodin kanssa]
https://www.itsvse.com/thread-10628-1-1.html

.NET/C# vanhempi-lapsiprosessit kommunikoivat MemoryMappedFile-tiedoston avulla
https://www.itsvse.com/thread-10983-1-1.html

.NET/C# vanhempi-lapsiprosessit kommunikoivat standardien syöttö-/tulostusvirtojen avulla
https://www.itsvse.com/thread-10982-1-1.html

Unix-verkkotunnukset

Unix-verkkotunnukset (UDS), paikalliset soketit tai prosessienväliset viestintäsoketit (IPC) ovat viestintäpäätepisteitä, jotka vaihtavat dataa prosessien välillä, jotka toimivat samassa Unix- tai Unix-tyyppisessä käyttöjärjestelmässä.

Nimi Unix-domain-socket viittaa domain-parametrin arvoon, joka välitetään funktiolle, joka loi socket-järjestelmän resurssin. Sama viestintäalue on myös valittu. [ 1 ] AF_UNIXAF_LOCAL

TypeUDS:n kelvolliset parametriarvot ovat:

  • SOCK_STREAM (verrattuna TCP:hen) – Käytetään virtausorientoituneissa soketteissa
  • SOCK_DGRAM (verrattuna UDP:hen) – datagrammipohjainen soketti viestirajojen säilyttämiseen (kuten useimmissa UNIX-toteutuksissa, UNIX-domainin datagrammipesät ovat aina luotettavia eivätkä järjestä datagrammeja uudelleen)
  • SOCK_SEQPACKET (verrattuna SCTP:hen) – Peräkkäiset pakettisoketit yhteyksille, jotka säilyttävät viestirajat ja toimittavat viestejä niiden lähettämisjärjestyksessä


UDS-työkalu on POSIX-käyttöjärjestelmän vakiokomponentti.

Miksi käyttää Unix-domain-soketteja?

Unix-domain-soketit mahdollistavat prosessien välisen viestinnän yhdellä koneella. Miksi siis valitsisit ne TCP/IP:n sijaan? Esimerkiksi TCP/IP:ssä voit käyttää loopback-osoitetta (localhost) yhden palvelimen väliseen viestintään. Windowsissa, miksi valitsisit ne Windowsin nimeämisputkien sijaan?

Yleisesti ottaen on useita syitä, miksi voit valita UDS:n käytön TCP/IP:n sijaan prosessien väliseen viestintään:

  • Unix-domain-soketit tuottavat tyypillisesti vähemmän ylikuormitusta ja nopeampia siirtonopeuksia kuin TCP/IP:llä
  • TCP/IP-soketit ovat rajallinen resurssi, kun taas Unix-verkkotunnuksella ei ole kovia rajoja
  • Unix-domain-soketit tulevat tiedostomuodossa, joten tunnettuja polkuja on helppo "löytää"
  • Integraatio tiedostojärjestelmiin tuo myös ylimääräisen turvakerroksen (jos sinulla ei ole pääsyä tiedostopolkuun, et pääse socketiin)


Ensimmäinen asia on helppo ymmärtää – nopea Google-haku osoittaa, että UDS- ja TCP/IP-testit ovat aina parempia kuin UDS, koska siinä on huomattavasti alhaisempi viive ja myös huomattavasti korkeampi läpäisy. Tämä johtuu pääasiassa siitä, että UDS on optimoitu kommunikoimaan saman palvelimen kanssa,IP-viestinnässä localhostin täytyy käydä IP-pinon läpi sekä lähettäjän että vastaanottajan puolella

TCP/IP-soketit ovat rajallinen resurssi; Voit käyttää kerrallaan enintään 65 535 pistoketta. Jos lisäät ongelman, TIME_WAIT käytettävissä olevien liittimien enimmäismäärä voi olla paljon pienempi kuin tämä arvo. Localhost-yhteys kuluttaa myös tämän poolin soketteja. UDS:n käyttö välttää tämän ongelman ovelasti; Se mahdollistaa viestinnän ilman, että TCP/IP-soketteja kulutetaan.

palvelin

Luo uusi .NET 8 -konsoliprojekti, muuta SDK muotoon Microsoft.NET.Sdk.Web ja konfiguroi se seuraavasti:

Greet.proto on konfiguroitu seuraavasti:

Koodi on seuraava:

Kun kokoelma alkaa, kuten alla on esitetty:



asiakas

Luo uusi .NET 8 -konsoliprojekti ja käytä seuraavia kirjastoja:

gRPC-rajapinnan kutsumenetelmää kutsutaan 10 kertaa, ja jokainen kutsu kutsutaan 200 millisekunnin ajan, ja koodi on seuraava:

Aloita projekti ja toteutuksen valmistuttua, kuten alla olevassa kuvassa näkyy:



Viittaus:

Hyperlinkin kirjautuminen on näkyvissä.
Hyperlinkin kirjautuminen on näkyvissä.




Edellinen:Jetson (1) Jetson Orin Nano Super Developer Kit purkautuneena
Seuraava:Verkkokontti-netty- ja tomcat-vertailu Spring Bootissa
 Vuokraisäntä| Julkaistu 2025-8-11 klo 20:57:04 |
HttpClienteigRPCja Unix-domain-socket-viestintä

palvelin

asiakas

Kuten alla on esitetty:

 Vuokraisäntä| Julkaistu 2025-8-12 10:05:14 |
ProtocolType.Unspecified: Protokollaa ei ole määritelty, ja järjestelmä valitsee sen automaattisesti
 Vuokraisäntä| Julkaistu 2025-8-12 klo 11:02:41 |
C#-testi pystyy yhdistämään UDS:ään normaalisti


 Vuokraisäntä| Julkaistu 2025-9-16 klo 15:26:30 |
Nginxin käyttö Unix-domain-sokettien välittämiseen (Ei testattu
Konfiguraatio on seuraava:

Priorisoi UDS: Jos palvelusi toimii samalla koneella kuin Nginx ja etsit korkeaa suorituskykyä ja matalaa viivettä, UDS on paras valinta.
 Vuokraisäntä| Julkaistu 2025-9-16 klo 17:11:05 |
Nginx-käänteinen välityspalvelin php-fpm käyttää UDS:ää kommunikoimaan
https://www.itsvse.com/thread-11068-1-1.html
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com