Požadavky: Na stejném serveru komunikují procesy mezi sebou pomocí anonymních pipeline, pojmenovaných pipeline, souborů mapování paměti, HTTP, TCP, Standardních vstupních/výstupních toků atd. Někdy je potřeba servery nasadit více aplikací a aplikace mohou mezi sebou skutečně komunikovat pomocí socketů v oblasti gRPC a unix.
přezkoumání
Unixové doménové sockety
Unixové doménové sockety (UDS), lokální sockety nebo interprocesní komunikační (IPC) sockety jsou komunikační koncové body, které si vyměňují data mezi procesy běžícími ve stejném Unixu nebo Unixu podobném operačním systému.
Název Unixový doménový socket odkazuje na hodnotu doménového parametru předávanou funkci, která vytvořila zdrojový systém socketu. Je také zvolena stejná komunikační doména. [ 1 ] AF_UNIXAF_LOCAL
Platné hodnoty parametrů pro typeUDS jsou:
- SOCK_STREAM (ve srovnání s TCP) – Používá se pro sockety orientované na proud
- SOCK_DGRAM (ve srovnání s UDP) – datagramově orientovaný socket pro zachování hranic zpráv (stejně jako u většiny implementací UNIXu jsou sockety s datagramy v UNIXu vždy spolehlivé a nepřeřazují datagramy)
- SOCK_SEQPACKET (ve srovnání se SCTP) – Sekvenční paketové sockety pro spojení, která zachovávají hranice zpráv a doručují zprávy v pořadí, v jakém jsou odeslány
Nástroj UDS je standardní součástí operačního systému POSIX.
Proč používat Unixové doménové sockety?
Unixové doménové sockety umožňují komunikaci mezi procesy na jednom stroji. Tak proč byste si je vybrali místo TCP/IP? Například v TCP/IP můžete použít loopback adresu (localhost) pro komunikaci s jedním serverem. Proč byste si na Windows vybrali právě tyto pipeline místo Windows Naming Pipelines?
Obecně existuje několik důvodů, proč byste mohli zvolit UDS místo TCP/IP pro meziprocesovou komunikaci:
- Unixové doménové sockety mají obvykle menší režie a rychlejší přenosové rychlosti než použití TCP/IP
- TCP/IP sockety jsou omezeným zdrojem, zatímco sockety v unixové doméně nemají pevná omezení
- Unixové doménové sockety jsou dostupné ve formě souborů, takže je snadné "objevit" známé cesty
- Integrace se souborovými systémy také přidává další vrstvu zabezpečení (pokud nemáte přístup k cestě k souboru, nemůžete přistupovat k socketu)
První bod je snadno pochopitelný – rychlé vyhledání na Googlu ukáže, že benchmarky UDS a TCP/IP jsou vždy lepší než UDS, protože mají nejen výrazně nižší latenci, ale také výrazně vyšší propustnost. Je to hlavně díky tomu, že UDS je optimalizován pro komunikaci se stejným serverem,Pro IP komunikaci musí localhost procházet IP stackem na obou stranách odesílatele i příjemce。
TCP/IP sockety jsou omezený zdroj; Můžete použít maximálně 65 535 socketů najednou. Pokud přidáte problém, maximální počet socketů, které TIME_WAIT skutečně dostupné, může být mnohem menší než tato hodnota. Připojení localhost také spotřebovává sockety v tomto poolu. Použití UDS chytře tento problém obejde; Umožňuje komunikaci bez vyčerpání TCP/IP socketů.
server
Vytvořte nový .NET 8 konzolový projekt, změňte SDK na Microsoft.NET.Sdk.Web a nakonfigurujte ho následovně:
Greet.proto je nakonfigurován následovně:
Kód je následující:
Po zahájení kompilace, jak je uvedeno níže:
klient
Vytvořte nový .NET 8 konzolový projekt a odkazujte na následující knihovny:
Metoda volání rozhraní gRPC se volá 10krát, přičemž každé volání trvá 200 milisekund a kód je následující:
Spusťte projekt a po dokončení realizace, jak je znázorněno na obrázku níže:
Odkaz:
Přihlášení k hypertextovému odkazu je viditelné.
Přihlášení k hypertextovému odkazu je viditelné. |