Krav: På samma server kommunicerar processer med varandra via anonyma pipelines, namngivna pipelines, minnesmappningsfiler, HTTP, TCP, Standard Input/Output Streams, etc. Ibland behöver servrar distribuera flera applikationer, och applikationer kan faktiskt kommunicera med varandra via gRPC- och Unix-domänsocklar.
recension
Unix-domänsocklar
Unix domänsocklar (UDS), lokala sockets eller Interprocess Communication (IPC) socklar är kommunikationsändpunkter som utbyter data mellan processer som körs i samma Unix- eller Unix-liknande operativsystem.
Namnet Unix-domänsocket syftar på domänparametervärdet som skickas till funktionen som skapade socketsystemets resurs. Samma kommunikationsdomän väljs också. [ 1 ] AF_UNIXAF_LOCAL
De giltiga parametervärdena för typeUDS är:
- SOCK_STREAM (jämfört med TCP) – Används för strömorienterade sockets
- SOCK_DGRAM (jämfört med UDP) – en datagramorienterad socket för att bevara meddelandegränser (som med de flesta UNIX-implementationer är UNIX-domänens datagramsocklar alltid pålitliga och omordnar inte datagram)
- SOCK_SEQPACKET (jämfört med SCTP) – Sekventiella paketsocklar för anslutningar som bevarar meddelandegränser och levererar meddelanden i den ordning de skickas i
UDS-verktyget är en standardkomponent i operativsystemet POSIX.
Varför använda Unix-domänsocklar?
Unix-domänsocklar möjliggör kommunikation mellan processer på en enda maskin. Så varför skulle du välja dem framför TCP/IP? Till exempel kan du i TCP/IP använda en loopback-adress (localhost) för kommunikation mellan en och en enda server. På Windows, varför skulle du välja dem framför Windows Naming Pipelines?
Generellt finns det flera anledningar till varför du kan välja att använda UDS istället för TCP/IP för kommunikation mellan processer:
- Unix-domänsocklar har vanligtvis mindre overhead och snabbare överföringshastigheter än att använda TCP/IP
- TCP/IP-sockets är en ändlig resurs, medan Unix-domänsocketar inte har några hårda gränser
- Unix-domänsocklar finns i filform, så det är lätt att "upptäcka" kända vägar
- Integration med filsystem tillför också ett extra säkerhetslager (om du inte har tillgång till filsökvägen kan du inte komma åt socketen)
Den första punkten är lätt att förstå – en snabb Google-sökning visar att UDS- och TCP/IP-benchmarks alltid är bättre än UDS eftersom det inte bara har betydligt lägre latens utan också betydligt högre genomströmning. Detta beror främst på att UDS är optimerat för kommunikation med samma server,För IP-kommunikation måste localhost gå genom IP-stacken på både sändar- och mottagarsidan。
TCP/IP-sockets är en ändlig resurs; Du kan bara använda upp till 65 535 uttag åt gången. Om du lägger till problemet kan det maximala antalet uttag som faktiskt TIME_WAIT tillgängliga vara mycket mindre än detta värde. Localhost-anslutningen förbrukar också sockets i denna pool. Att använda UDS undviker smart detta problem; Den möjliggör kommunikation utan att uttömma TCP/IP-sockets.
server
Skapa ett nytt .NET 8-konsolprojekt, byt SDK till Microsoft.NET.Sdk.Web och konfigurera det enligt följande:
Greet.proto är konfigurerat enligt följande:
Koden är följande:
Efter att samlingen startar, som visas nedan:
klient
Skapa ett nytt .NET 8-konsolprojekt och referera till följande bibliotek:
Metoden för att anropa gRPC-gränssnittet anropas 10 gånger, och varje anrop anropas i 200 millisekunder, och koden är följande:
Starta projektet, och efter att genomförandet är slutfört, som visas i figuren nedan:
Hänvisning:
Inloggningen med hyperlänken är synlig.
Inloggningen med hyperlänken är synlig. |