요구사항: 동일한 서버에서 프로세스들은 익명 파이프라인, 이름 있는 파이프라인, 메모리 매핑 파일, HTTP, TCP, 표준 입출력 스트림 등을 통해 서로 통신합니다. 때로는 서버가 여러 애플리케이션을 배포해야 하며, 애플리케이션들은 gRPC와 Unix 도메인 소켓을 통해 서로 통신할 수 있습니다.
복습
유닉스 도메인 소켓
유닉스 도메인 소켓(UDS), 로컬 소켓 또는 프로세스 간 통신(IPC) 소켓은 동일한 유닉스 또는 유닉스 유사 운영체제에서 실행되는 프로세스 간에 데이터를 교환하는 통신 엔드포인트입니다.
Unix 도메인 소켓이라는 이름은 소켓 시스템 자원을 생성한 함수에 전달된 도메인 매개변수 값을 의미합니다. 동일한 통신 도메인도 선택됩니다. [ 1 ] AF_UNIXAF_LOCAL
typeUDS의 유효한 매개변수 값은 다음과 같습니다:
- SOCK_STREAM (TCP와 비교) – 스트림 지향 소켓에 사용됩니다
- SOCK_DGRAM (UDP와 비교) – 메시지 경계를 보존하기 위한 데이터그램 지향 소켓 (대부분의 UNIX 구현과 마찬가지로 UNIX 도메인 데이터그램 소켓은 항상 신뢰할 수 있으며 데이터그램 순서를 재조정하지 않음)
- SOCK_SEQPACKET (SCTP 비교) – 메시지 경계를 보존하고 메시지를 전송 순서대로 전달하는 연결을 위한 순차 패킷 소켓
UDS 도구는 POSIX 운영체제의 표준 구성 요소입니다.
왜 유닉스 도메인 소켓을 사용하나요?
유닉스 도메인 소켓은 단일 머신 내에서 프로세스 간 통신을 가능하게 합니다. 그렇다면 왜 TCP/IP 대신 이들을 선택하시나요? 예를 들어, TCP/IP에서는 단일 서버 통신을 위해 루프백 주소(localhost)를 사용할 수 있습니다. 윈도우에서 왜 윈도우 명명 파이프라인 대신 이들을 선택하시나요?
일반적으로 프로세스 간 통신에 TCP/IP 대신 UDS를 선택하는 데에는 여러 가지 이유가 있습니다:
- 유닉스 도메인 소켓은 일반적으로 TCP/IP보다 오버헤드가 적고 전송 속도가 빠릅니다
- TCP/IP 소켓은 한정된 자원인 반면, Unix 도메인 소켓에는 엄격한 제한이 없습니다
- 유닉스 도메인 소켓은 파일 형태로 제공되기 때문에 알려진 경로를 '발견'하기 쉽습니다
- 파일 시스템과의 통합은 추가적인 보안 계층을 제공합니다(파일 경로에 접근할 수 없으면 소켓에 접근할 수 없습니다).
첫 번째 점은 이해하기 쉽습니다 - 구글링만 해도 UDS와 TCP/IP 벤치마크가 항상 UDS보다 낫다는 것을 알 수 있습니다. 왜냐하면 UDS는 지연 시간이 훨씬 낮을 뿐만 아니라 처리량도 훨씬 높기 때문입니다. 이는 주로 UDS가 동일한 서버와의 통신에 최적화되어 있기 때문입니다.IP 통신을 위해 localhost는 송신자와 수신자 양쪽 IP 스택을 거쳐야 합니다。
TCP/IP 소켓은 한정된 자원입니다; 한 번에 최대 65,535개의 소켓만 사용할 수 있습니다. 문제를 더하면, 실제로 사용 가능한 최대 소켓 수는 이 값보다 훨씬 적을 수 TIME_WAIT습니다. localhost 연결은 이 풀 내 소켓도 소모합니다. UDS를 사용하면 이 문제를 영리하게 피할 수 있습니다; TCP/IP 소켓을 소진하지 않고도 통신이 가능합니다.
서버
새로운 .NET 8 콘솔 프로젝트를 만들고 SDK를 Microsoft.NET.Sdk.Web으로 변경한 후 다음과 같이 구성하세요:
Greet.proto는 다음과 같이 구성되어 있습니다:
코드는 다음과 같습니다:
컴필레이션이 시작된 후, 아래와 같이 :
클라이언트
새로운 .NET 8 콘솔 프로젝트를 만들고 다음 라이브러리를 참조하세요:
gRPC 인터페이스를 호출하는 방법은 10번 호출되며, 각 호출마다 200밀리초 동안 호출되며, 코드는 다음과 같습니다:
프로젝트를 시작하고, 실행 완료 후에는 아래 그림과 같이 진행됩니다:
참조:
하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다. |