Requisitos: En el mismo servidor, los procesos se comunican entre sí usando pipelines anónimas, pipelines nombrados, archivos de mapeo de memoria, HTTP, TCP, flujos estándar de entrada/salida, etc. A veces los servidores necesitan desplegar múltiples aplicaciones, y las aplicaciones pueden comunicarse entre sí usando sockets de dominio gRPC y Unix.
revisión
Sockets de dominio Unix
Los sockets de dominio Unix (UDS), sockets locales o sockets de comunicación entre procesos (IPC) son puntos finales de comunicación que intercambian datos entre procesos que se ejecutan en el mismo sistema operativo Unix o similar a Unix.
El nombre socket de dominio Unix se refiere al valor del parámetro de dominio que se pasa a la función que creó el recurso del sistema socket. También se selecciona el mismo dominio de comunicación. [ 1 ] AF_UNIXAF_LOCAL
Los valores válidos de los parámetros para typeUDS son:
- SOCK_STREAM (en comparación con TCP) – Usado para sockets orientados a flujos
- SOCK_DGRAM (en comparación con UDP) – un socket orientado a datagramas para preservar los límites de los mensajes (como en la mayoría de las implementaciones de UNIX, los sockets de datagramas de dominio UNIX son siempre fiables y no reordenan los datagramas)
- SOCK_SEQPACKET (en comparación con SCTP) – Sockets de paquetes secuenciales para conexiones que preservan los límites de los mensajes y entregan los mensajes en el orden en que se envían
La herramienta UDS es un componente estándar del sistema operativo POSIX.
¿Por qué usar sockets de dominio Unix?
Los sockets de dominio Unix permiten la comunicación entre procesos en una sola máquina. Entonces, ¿por qué elegirlos a ellos en lugar de TCP/IP? Por ejemplo, en TCP/IP, puedes usar una dirección de bucle (localhost) para la comunicación de un solo servidor. En Windows, ¿por qué elegirlos en lugar de los Nomenclados de Canalizaciones de Windows?
En general, hay varias razones por las que podrías elegir usar UDS en lugar de TCP/IP para la comunicación entre procesos:
- Los sockets de dominio Unix suelen tener menos sobrecarga y velocidades de transferencia más rápidas que usar TCP/IP
- Los sockets TCP/IP son un recurso finito, mientras que los sockets de dominio Unix no tienen límites estrictos
- Los sockets de dominio Unix vienen en formato de archivo, por lo que es fácil "descubrir" rutas conocidas
- La integración con sistemas de archivos también añade una capa extra de seguridad (si no tienes acceso a la ruta del archivo, no puedes acceder al socket).
El primer punto es fácil de entender: una búsqueda rápida en Google mostrará que los benchmarks de UDS y TCP/IP siempre son mejores que UDS porque no solo tienen una latencia significativamente menor, sino también un rendimiento significativamente mayor. Esto se debe principalmente a que UDS está optimizado para la comunicación con el mismo servidor,Para la comunicación IP, localhost debe pasar por la pila IP tanto en el lado del emisor como del receptor。
Los sockets TCP/IP son un recurso finito; Solo puedes usar hasta 65.535 sockets a la vez. Si sumas el problema, el número máximo de enchufes que TIME_WAIT disponibles puede ser mucho menor que este valor. La conexión localhost también consume sockets en este pool. Usar UDS evita inteligentemente este problema; Permite la comunicación sin agotar los sockets TCP/IP.
servidor
Crea un nuevo proyecto de consola .NET 8, cambia el SDK a Microsoft.NET.Sdk.Web y configúralo de la siguiente manera:
Greet.proto está configurado de la siguiente manera:
El código es el siguiente:
Después de que comienza la recopilación, como se muestra a continuación:
cliente
Crea un nuevo proyecto de consola .NET 8 y consulta las siguientes librerías:
El método para llamar a la interfaz gRPC se llama 10 veces, y cada llamada se llama durante 200 milisegundos, y el código es el siguiente:
Inicia el proyecto y, una vez completada la ejecución, como se muestra en la figura siguiente:
Referencia:
El inicio de sesión del hipervínculo es visible.
El inicio de sesión del hipervínculo es visible. |