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
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ä. |