Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 658|Resposta: 5

[Gorjetas] Processos .NET/C# se comunicam entre sockets de domínio gRPC e Unix

[Copiar link]
Postado em 2025-8-11 20:24:04 | | | |
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
.NET/C# Comunicação Cross-Process baseada em NamedPipe [com Código-Fonte]
https://www.itsvse.com/thread-10628-1-1.html

Processos pai-filho .NET/C# se comunicam usando MemoryMappedFile
https://www.itsvse.com/thread-10983-1-1.html

Processos pai-filho .NET/C# se comunicam usando fluxos padrão de entrada/saída
https://www.itsvse.com/thread-10982-1-1.html

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.




Anterior:Jetson (1) Kit de Desenvolvimento Super Jetson Orin Nano desfeito
Próximo:Comparação entre nety de contêiner web e tomcat no Spring Boot
 Senhorio| Postado em 2025-8-11 20:57:04 |
HttpClientnãogRPCe comunicação por socket de domínio Unix

servidor

cliente

Como mostrado abaixo:

 Senhorio| Publicado em 2025-8-12 10:05:14 |
ProtocolType.Unspecified: Nenhum protocolo é especificado, e o sistema o seleciona automaticamente
 Senhorio| Postado em 2025-8-12 11:02:41 |
O teste C# consegue se conectar ao UDS normalmente


 Senhorio| Postado em 16-09-2025 às 15:26:30 |
Usando nginx para proxy sockets de domínio Unix (Não testado
A configuração é a seguinte:

Priorize o UDS: Se seu serviço estiver na mesma máquina que o Nginx e você estiver buscando alto desempenho e baixa latência, o UDS é a melhor escolha.
 Senhorio| Postado em 16-09-2025 17:11:05 |
O proxy reverso Nginx php-fpm usa UDS para se comunicar
https://www.itsvse.com/thread-11068-1-1.html
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com