Cerințe: Pe același server, procesele comunică între ele folosind pipeline-uri anonime, pipeline-uri denumite, fișiere de mapare a memoriei, HTTP, TCP, fluxuri standard de intrare/ieșire etc. Uneori, serverele trebuie să implementeze mai multe aplicații, iar aplicațiile pot comunica între ele folosind gRPC și socket-uri de domeniu Unix.
recenzie
Socket-uri de domeniu Unix
Socket-urile de Domeniu Unix (UDS), Socket-urile Locale sau Socket-urile de Comunicare Interproces (IPC) sunt puncte finale de comunicație care schimbă date între procese care rulează în același sistem de operare Unix sau asemănător Unix.
Denumirea socket de domeniu Unix se referă la valoarea parametrului de domeniu transmisă funcției care a creat resursa sistemului socket. Același domeniu de comunicare este de asemenea selectat. [ 1 ] AF_UNIXAF_LOCAL
Valorile valide ale parametrilor pentru typeUDS sunt:
- SOCK_STREAM (comparativ cu TCP) – Folosit pentru socket-uri orientate pe flux
- SOCK_DGRAM (comparativ cu UDP) – un socket orientat pe datagrame pentru păstrarea granițelor mesajelor (ca în majoritatea implementărilor UNIX, socket-urile de datagrame în domeniul UNIX sunt întotdeauna fiabile și nu reordonează datagramele)
- SOCK_SEQPACKET (comparativ cu SCTP) – Socket-uri secvențiale pentru conexiuni care păstrează limitele mesajelor și livrează mesajele în ordinea în care sunt trimise
Instrumentul UDS este o componentă standard a sistemului de operare POSIX.
De ce să folosești socket-uri de domenii Unix?
Socket-urile Unix permit comunicarea între procese pe o singură mașină. Deci de ce le-ai alege în locul TCP/IP? De exemplu, în TCP/IP, poți folosi o adresă de loopback (localhost) pentru comunicarea între un singur server. Pe Windows, de ce le-ai alege în loc de Windows Naming Pipelines?
În general, există mai multe motive pentru care ai putea alege să folosești UDS în loc de TCP/IP pentru comunicarea între procese:
- Socket-urile de domeniu Unix au, de obicei, un overhead mai mic și viteze de transfer mai rapide decât utilizarea TCP/IP
- Socket-urile TCP/IP sunt o resursă finită, în timp ce socket-urile de domeniu Unix nu au limite stricte
- Socket-urile de domenii Unix vin sub formă de fișiere, așa că este ușor să "descoperi" căi cunoscute
- Integrarea cu sistemele de fișiere adaugă, de asemenea, un strat suplimentar de securitate (dacă nu ai acces la calea fișierului, nu poți accesa socket-ul).
Primul punct este ușor de înțeles - o căutare rapidă pe Google va arăta că benchmark-urile UDS și TCP/IP sunt întotdeauna mai bune decât UDS pentru că nu doar că are o latență semnificativ mai mică, dar și un throughput semnificativ mai mare. Acest lucru se datorează în principal faptului că UDS este optimizat pentru comunicarea cu același server,Pentru comunicarea IP, localhost-ul trebuie să treacă prin stiva IP atât pe partea emițătorului, cât și pe cea a receptorului。
Soclurile TCP/IP sunt o resursă finită; Poți folosi doar până la 65.535 de socluri simultan. Dacă adaugi problema, numărul maxim de socluri care TIME_WAIT disponibile poate fi mult mai mic decât această valoare. Conexiunea localhost consumă, de asemenea, socket-uri în acest pool. Folosirea UDS evită inteligent această problemă; Permite comunicarea fără a epuiza socket-urile TCP/IP.
server
Creează un nou proiect de consolă .NET 8, schimbă SDK-ul în Microsoft.NET.Sdk.Web și configurează-l astfel:
Greet.proto este configurat astfel:
Codul este următorul:
După ce începe compilația, așa cum se arată mai jos:
client
Creează un nou proiect de consolă .NET 8 și referă următoarele biblioteci:
Metoda de apelare a interfeței gRPC este numită de 10 ori, iar fiecare apel este apelat timp de 200 de milisecunde, iar codul este următorul:
Începe proiectul, iar după finalizarea execuției, așa cum se arată în figura de mai jos:
Referință:
Autentificarea cu hyperlink este vizibilă.
Autentificarea cu hyperlink este vizibilă. |