Requisitos: No mesmo servidor, os processos se comunicam entre si usando pipelines anônimos, pipelines nomeados, arquivos de mapeamento de memória, HTTP, TCP, Fluxos Padrão de Entrada/Saída, etc. Às vezes, servidores precisam implantar múltiplos aplicativos, e os aplicativos podem realmente se comunicar entre si usando gRPC e sockets de domínio Unix.
revisar
Soquetes de domínio Unix
Soquetes de Domínio Unix (UDS), Soquetes Locais ou Soquetes de Comunicação Interprocessos (IPC) são pontos finais de comunicação que trocam dados entre processos rodando no mesmo sistema operacional Unix ou semelhante a Unix.
O nome socket de domínio Unix refere-se ao valor do parâmetro de domínio passado para a função que criou o recurso do sistema socket. O mesmo domínio de comunicação também é selecionado. [ 1 ] AF_UNIXAF_LOCAL
Os valores válidos dos parâmetros para typeUDS são:
- SOCK_STREAM (comparado ao TCP) – Usado para soquetes orientados a fluxo
- SOCK_DGRAM (em comparação com UDP) – um soquete orientado a datagramas para preservar os limites das mensagens (como na maioria das implementações UNIX, soquetes de datagrama de domínio UNIX são sempre confiáveis e não reordenam datagramas)
- SOCK_SEQPACKET (em comparação com SCTP) – Soquetes de pacotes sequenciais para conexões que preservam os limites das mensagens e entregam mensagens na ordem em que são enviadas
A ferramenta UDS é um componente padrão do sistema operacional POSIX.
Por que usar sockets de domínio Unix?
Soquetes de domínio Unix permitem comunicação entre processos em uma única máquina. Então, por que você escolheria eles em vez de TCP/IP? Por exemplo, no TCP/IP, você pode usar um endereço de loopback (localhost) para comunicação de servidor único. No Windows, por que você escolheria eles em vez dos Nomenclaturas do Windows?
Em geral, existem várias razões pelas quais você pode optar por usar UDS em vez de TCP/IP para comunicação entre processos:
- Soquetes de domínio Unix normalmente têm menos overhead e velocidades de transferência mais rápidas do que o uso de TCP/IP
- Soquetes TCP/IP são um recurso finito, enquanto soquetes de domínio Unix não possuem limites rígidos
- Soquetes de domínio Unix vêm em formato de arquivo, então é fácil "descobrir" caminhos conhecidos
- A integração com sistemas de arquivos também adiciona uma camada extra de segurança (se você não tem acesso ao caminho do arquivo, não consegue acessar o soquete)
O primeiro ponto é fácil de entender – uma pesquisa rápida no Google mostra que benchmarks de UDS e TCP/IP são sempre melhores que UDS porque não só têm latência significativamente menor, como também uma taxa de transferência significativamente maior. Isso se deve principalmente ao fato de que o UDS é otimizado para comunicação com o mesmo servidor,Para comunicação IP, o localhost deve passar pela pilha de IP tanto no lado do emissor quanto do receptor。
Soquetes TCP/IP são um recurso finito; Você só pode usar até 65.535 soquetes ao mesmo tempo. Se você adicionar o problema, o número máximo de soquetes que TIME_WAIT realmente disponíveis pode ser muito menor que esse valor. A conexão localhost também consome sockets nesse pool. O uso do UDS evita esse problema de forma inteligente; Ele permite comunicação sem esgotar os sockets TCP/IP.
servidor
Crie um novo projeto de console .NET 8, mude o SDK para Microsoft.NET.Sdk.Web e configure da seguinte forma:
O Greet.proto está configurado da seguinte forma:
O código é o seguinte:
Após o início da compilação, como mostrado abaixo:
cliente
Crie um novo projeto de console .NET 8 e consulte as seguintes bibliotecas:
O método de chamar a interface gRPC é chamado 10 vezes, e cada chamada é chamada por 200 milissegundos, e o código é o seguinte:
Inicie o projeto e, após a execução, conforme mostrado na figura abaixo:
Referência:
O login do hiperlink está visível.
O login do hiperlink está visível. |