이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 658|회답: 5

[팁] .NET/C# 프로세스는 gRPC와 Unix 도메인 소켓 간에 통신합니다

[링크 복사]
2025-8-11 20:24:04에 게시됨 | | | |
요구사항: 동일한 서버에서 프로세스들은 익명 파이프라인, 이름 있는 파이프라인, 메모리 매핑 파일, HTTP, TCP, 표준 입출력 스트림 등을 통해 서로 통신합니다. 때로는 서버가 여러 애플리케이션을 배포해야 하며, 애플리케이션들은 gRPC와 Unix 도메인 소켓을 통해 서로 통신할 수 있습니다.

복습
.NET/C# NamedPipe 기반 NamedPipe 교차 프로세스 통신 [소스 코드 포함]
https://www.itsvse.com/thread-10628-1-1.html

.NET/C# 부모-자식 프로세스는 MemoryMappedFile을 사용하여 통신합니다
https://www.itsvse.com/thread-10983-1-1.html

.NET/C# 부모-자식 프로세스는 표준 입출력 스트림을 사용하여 통신합니다
https://www.itsvse.com/thread-10982-1-1.html

유닉스 도메인 소켓

유닉스 도메인 소켓(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밀리초 동안 호출되며, 코드는 다음과 같습니다:

프로젝트를 시작하고, 실행 완료 후에는 아래 그림과 같이 진행됩니다:



참조:

하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.




이전의:Jetson (1) Jetson Orin Nano 슈퍼 개발자 키트 언박스
다음:Spring Boot에서 웹 컨테이너 netty와 tomcat 비교
 집주인| 2025-8-11 20:57:04에 게시됨 |
Http클라이언트gRPC그리고 Unix 도메인 소켓 통신

서버

클라이언트

아래에 나와 있습니다:

 집주인| 2025-8-12 10:05:14에 게시됨 |
프로토콜 유형.미지정: 프로토콜이 명시되어 있지 않으며, 시스템이 자동으로 선택합니다
 집주인| 2025-8-12 11:02:41에 게시됨 |
C# 테스트는 정상적으로 UDS에 연결할 수 있습니다


 집주인| 2025-9-16 15:26:30에 게시됨 |
nginx를 사용하여 Unix 도메인 소켓을 프록시하는 방법 (검사 안 했어
구성은 다음과 같습니다:

UDS 우선순위: 서비스가 Nginx와 같은 기기에서 고성능과 낮은 지연을 원한다면 UDS가 최선의 선택입니다.
 집주인| 2025-9-16 17:11:05에 게시됨 |
Nginx 리버스 프록시 php-fpm은 UDS를 사용하여 통신합니다
https://www.itsvse.com/thread-11068-1-1.html
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com