Requisiti: Sullo stesso server, i processi comunicano tra loro utilizzando pipeline anonime, pipeline nominate, file di mappatura di memoria, HTTP, TCP, flussi standard di input/output, ecc. A volte i server devono distribuire più applicazioni, e le applicazioni possono effettivamente comunicare tra loro usando gRPC e socket di dominio Unix.
recensione
Socket a dominio Unix
I socket di dominio Unix (UDS), i socket locali o i socket di comunicazione interprocessi (IPC) sono endpoint di comunicazione che scambiano dati tra processi che eseguono nello stesso sistema operativo Unix o Unix-like.
Il nome socket di dominio Unix si riferisce al valore del parametro di dominio passato alla funzione che ha creato la risorsa di sistema socket. Viene selezionato anche lo stesso dominio di comunicazione. [ 1 ] AF_UNIXAF_LOCAL
I valori validi dei parametri per typeUDS sono:
- SOCK_STREAM (rispetto a TCP) – Utilizzato per socket orientati allo stream
- SOCK_DGRAM (rispetto a UDP) – un socket orientato ai datagrammi per preservare i confini dei messaggi (come nella maggior parte delle implementazioni UNIX, i socket dei datagrammi a dominio UNIX sono sempre affidabili e non riordinano i datagrammi)
- SOCK_SEQPACKET (rispetto a SCTP) – Socket di pacchetto sequenziali per connessioni che preservano i confini dei messaggi e consegnano i messaggi nell'ordine in cui vengono inviati
Lo strumento UDS è un componente standard del sistema operativo POSIX.
Perché usare socket di dominio Unix?
I socket Unix a dominio consentono la comunicazione tra processi su una singola macchina. Allora perché li sceglieresti invece di TCP/IP? Ad esempio, in TCP/IP, puoi usare un indirizzo loopback (localhost) per la comunicazione a singolo server. Su Windows, perché li sceglieresti invece delle pipeline di denominazione di Windows?
In generale, ci sono diverse ragioni per cui potresti scegliere di usare UDS invece di TCP/IP per la comunicazione tra i processi:
- I socket Unix domain tipicamente hanno meno overhead e velocità di trasferimento più elevate rispetto all'uso di TCP/IP
- I socket TCP/IP sono una risorsa finita, mentre i socket di dominio Unix non hanno limiti rigidi
- I socket di dominio Unix sono disponibili sotto forma di file, quindi è facile "scoprire" i percorsi noti
- L'integrazione con i file system aggiunge anche un ulteriore livello di sicurezza (se non hai accesso al percorso file, non puoi accedere al socket)
Il primo punto è facile da capire: una rapida ricerca su Google mostrerà che i benchmark UDS e TCP/IP sono sempre migliori di UDS perché non solo ha una latenza significativamente inferiore, ma anche una velocità significativamente più alta. Questo è dovuto principalmente al fatto che UDS è ottimizzato per la comunicazione con lo stesso server,Per la comunicazione IP, localhost deve passare attraverso lo stack IP sia dal lato mittente che da quello del ricevente。
I socket TCP/IP sono una risorsa finita; Puoi usare solo fino a 65.535 socket alla volta. Se aggiungi il problema, il numero massimo di prese effettivamente disponibili TIME_WAIT potrebbe essere molto inferiore a questo valore. La connessione localhost consuma anche socket in questo pool. L'uso di UDS evita abilmente questo problema; Permette la comunicazione senza esaurire i socket TCP/IP.
server
Crea un nuovo progetto console .NET 8, cambia l'SDK in Microsoft.NET.Sdk.Web e configuralo come segue:
Greet.proto è configurato come segue:
Il codice è il seguente:
Dopo l'inizio della compilation, come mostrato di seguito:
cliente
Crea un nuovo progetto console .NET 8 e fai riferimento alle seguenti librerie:
Il metodo di chiamata dell'interfaccia gRPC viene chiamato 10 volte, e ogni chiamata è chiamata per 200 millisecondi, e il codice è il seguente:
Avviare il progetto e, dopo il completamento dell'esecuzione, come mostrato nella figura sottostante:
Riferimento:
Il login del link ipertestuale è visibile.
Il login del link ipertestuale è visibile. |