Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 658|Atsakyti: 5

[Patarimai] .NET/C# procesai bendrauja tarp gRPC ir Unix domenų lizdų

[Kopijuoti nuorodą]
Publikuota 2025-8-11 20:24:04 | | | |
Reikalavimai: Tame pačiame serveryje procesai bendrauja tarpusavyje naudodami anoniminius vamzdynus, pavadintus vamzdynus, atminties atvaizdavimo failus, HTTP, TCP, standartinius įvesties / išvesties srautus ir kt. Kartais serveriams reikia įdiegti kelias programas, o programos iš tikrųjų gali bendrauti tarpusavyje naudodamos gRPC ir Unix domenų lizdus.

Peržiūra
.NET/C# NamedPipe pagrįstas NamedPipe kelių procesų ryšys [su šaltinio kodu]
https://www.itsvse.com/thread-10628-1-1.html

.NET/C# pirminiai ir antriniai procesai bendrauja naudodami MemoryMappedFile
https://www.itsvse.com/thread-10983-1-1.html

.NET/C# pirminiai ir antriniai procesai bendrauja naudodami standartinius įvesties / išvesties srautus
https://www.itsvse.com/thread-10982-1-1.html

Unix domeno lizdai

Unix domeno lizdai (UDS), vietiniai lizdai arba tarpprocesinio ryšio (IPC) lizdai yra ryšio galiniai punktai, kurie keičiasi duomenimis tarp procesų, veikiančių toje pačioje Unix arba Unix tipo operacinėje sistemoje.

Pavadinimas Unix domeno lizdas reiškia domeno parametro reikšmę, perduotą funkcijai, kuri sukūrė lizdo sistemos išteklius. Taip pat pasirinktas tas pats ryšio domenas. [ 1 ] AF_UNIXAF_LOCAL

Leistinos typeUDS parametrų reikšmės:

  • SOCK_STREAM (palyginti su TCP) – naudojamas į srautą orientuotiems lizdams
  • SOCK_DGRAM (palyginti su UDP) – į datagramą orientuotas lizdas, skirtas pranešimų riboms išsaugoti (kaip ir daugumoje UNIX diegimų, UNIX domeno datagramų lizdai visada yra patikimi ir nepertvarko datagramų)
  • SOCK_SEQPACKET (palyginti su SCTP) – nuoseklūs paketų lizdai, skirti ryšiams, kurie išsaugo pranešimų ribas ir pristato pranešimus tokia tvarka, kokia jie siunčiami


UDS įrankis yra standartinis POSIX operacinės sistemos komponentas.

Kodėl verta naudoti Unix domeno lizdus?

Unix domeno lizdai leidžia bendrauti tarp procesų viename kompiuteryje. Taigi, kodėl turėtumėte pasirinkti juos per TCP / IP? Pavyzdžiui, TCP/IP galite naudoti atgalinį adresą (localhost) vieno serverio ryšiui. Kodėl sistemoje "Windows" turėtumėte rinktis juos, o ne "Windows" pavadinimų vamzdynus?

Apskritai, yra keletas priežasčių, kodėl galite pasirinkti naudoti UDS, o ne TCP/IP tarpprocesiniam ryšiui:

  • Unix domeno lizdai paprastai turi mažesnes pridėtines išlaidas ir didesnį perdavimo greitį nei naudojant TCP/IP
  • TCP/IP lizdai yra baigtinis išteklius, o Unix domenų lizdai neturi griežtų ribų
  • Unix domeno lizdai yra failo pavidalu, todėl lengva "atrasti" žinomus kelius
  • Integracija su failų sistemomis taip pat prideda papildomą saugumo lygį (jei neturite prieigos prie failo kelio, negalite pasiekti lizdo)


Pirmasis punktas yra lengvai suprantamas - greitai "Google" parodys, kad UDS ir TCP/IP etalonai visada yra geresni nei UDS, nes jie turi ne tik žymiai mažesnę delsą, bet ir žymiai didesnį pralaidumą. Taip yra daugiausia dėl to, kad UDS yra optimizuotas ryšiui su tuo pačiu serveriu,IP ryšiui localhost turi pereiti per IP rietuvę tiek siuntėjo, tiek gavėjo pusėse

TCP/IP lizdai yra baigtinis išteklius; Vienu metu galite naudoti tik iki 65 535 lizdų. Jei pridėsite problemą, maksimalus lizdų skaičius, kuris iš tikrųjų TIME_WAIT, gali būti daug mažesnis už šią vertę. Localhost ryšys taip pat sunaudoja šio telkinio lizdus. Naudojant UDS sumaniai išvengiama šios problemos; Tai leidžia bendrauti neišeikvojant TCP/IP lizdų.

serveris

Sukurkite naują .NET 8 konsolės projektą, pakeiskite SDK į Microsoft.NET.Sdk.Web ir sukonfigūruokite jį taip:

Greet.proto sukonfigūruotas taip:

Kodas yra toks:

Prasidėjus kompiliacijai, kaip parodyta toliau:



klientas

Sukurkite naują .NET 8 konsolės projektą ir nurodykite šias bibliotekas:

gRPC sąsajos iškvietimo būdas vadinamas 10 kartų, o kiekvienas skambutis iškviečiamas 200 milisekundžių, o kodas yra toks:

Pradėkite projektą ir baigę vykdymą, kaip parodyta paveikslėlyje žemiau:



Nuoroda:

Hipersaito prisijungimas matomas.
Hipersaito prisijungimas matomas.




Ankstesnis:Jetson (1) Jetson Orin Nano Super Developer Kit unboxed
Kitą:Žiniatinklio konteinerių tinklelio ir kačių palyginimas "Spring Boot"
 Savininkas| Publikuota: 2025-8-11 20:57:04 |
Http klientasnegRPCir Unix domeno lizdo ryšys

serveris

klientas

Kaip parodyta žemiau:

 Savininkas| Publikuota: 2025-8-12 10:05:14 |
ProtocolType.Unspecified: Nenurodytas joks protokolas ir sistema jį automatiškai pasirenka
 Savininkas| Publikuota: 2025-8-12 11:02:41 |
C# testas gali normaliai prisijungti prie UDS


 Savininkas| Publikuota: 2025-9-16 15:26:30 |
Nginx naudojimas tarpiniam Unix domeno lizdams (Neišbandyta
Konfigūracija yra tokia:

Pirmenybę teikite UDS: Jei jūsų paslauga teikiama tame pačiame įrenginyje kaip ir Nginx ir ieškote didelio našumo ir mažos delsos, UDS yra geriausias pasirinkimas.
 Savininkas| Publikuota: 2025-9-16 17:11:05 |
Nginx atvirkštinis tarpinis serveris php-fpm bendravimui naudoja UDS
https://www.itsvse.com/thread-11068-1-1.html
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com