Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 658|Odpowiedź: 5

[Napiwki] Procesy .NET/C# komunikują się między gniazdami domenowymi gRPC a Unix

[Skopiuj link]
Opublikowano 2025-8-11 20:24:04 | | | |
Wymagania: Na tym samym serwerze procesy komunikują się ze sobą za pomocą anonimowych potoków, nazwanych potoków, plików mapowania pamięci, HTTP, TCP, standardowych strumieni wejścia/wyjścia itd. Czasami serwery muszą wdrożyć wiele aplikacji, a aplikacje mogą faktycznie komunikować się ze sobą za pomocą gniazd domenowych gRPC i Unix.

recenzja
.NET/C# Komunikacja między procesami NamedPipe oparta na NamedPipe [z kodem źródłowym]
https://www.itsvse.com/thread-10628-1-1.html

Procesy rodzic-dziecko .NET/C# komunikują się za pomocą MemoryMappedFile
https://www.itsvse.com/thread-10983-1-1.html

Procesy rodzic-dziecko .NET/C# komunikują się za pomocą standardowych strumieni wejścia/wyjścia
https://www.itsvse.com/thread-10982-1-1.html

Gniazda domeny Unix

Gniazda domenowe Unix (UDS), gniazda lokalne lub sockety komunikacji międzyprocesowej (IPC) to punkty końcowe komunikacji, które wymieniają dane między procesami działającymi w tym samym systemie operacyjnym Unix lub podobnym do Unix.

Nazwa gniazdo domenowe Unix odnosi się do wartości parametru domeny przekazywanej funkcji, która stworzyła zasób systemu gniazda. Wybierana jest również ta sama domena komunikacji. [ 1 ] AF_UNIXAF_LOCAL

Prawidłowe wartości parametrów dla typeUDS to:

  • SOCK_STREAM (w porównaniu do TCP) – Używany dla gniazd zorientowanych strumieniowo
  • SOCK_DGRAM (w porównaniu do UDP) – gniazdo zorientowane na datagramy do zachowania granic komunikatów (jak w większości implementacji UNIX, gniazda datagramów domeny UNIX są zawsze niezawodne i nie zmieniają kolejności datagramów)
  • SOCK_SEQPACKET (w porównaniu do SCTP) – Sekwencyjne gniazda pakietów dla połączeń, które zachowują granice wiadomości i dostarczają je w kolejności ich wysyłania


Narzędzie UDS jest standardowym komponentem systemu operacyjnego POSIX.

Dlaczego warto używać socketów domenowych Unix?

Gniazda domeny Unix umożliwiają komunikację międzyprocesową na jednej maszynie. Dlaczego więc wybrać ich zamiast TCP/IP? Na przykład w TCP/IP można użyć adresu pętli (localhost) do komunikacji pojedynczego serwera. Dlaczego na Windowsie wybierasz ich zamiast Windows Naming Pipelines?

Ogólnie rzecz biorąc, istnieje kilka powodów, dla których możesz zdecydować się na UDS zamiast TCP/IP do komunikacji międzyprocesowej:

  • Gniazda domeny Unix zazwyczaj mają mniejszy narzut i szybsze prędkości transferu niż TCP/IP
  • Gniazda TCP/IP są zasobem ograniczonym, podczas gdy gniazda domeny Unix nie mają twardych ograniczeń
  • Gniazda domeny Unix dostępne są w formie plików, więc łatwo jest "odkryć" znane ścieżki
  • Integracja z systemami plików dodaje dodatkową warstwę bezpieczeństwa (jeśli nie masz dostępu do ścieżki pliku, nie możesz uzyskać dostępu do gniazda)


Pierwszy punkt jest łatwy do zrozumienia – szybkie wyszukiwanie w Google pokaże, że benchmarki UDS i TCP/IP są zawsze lepsze niż UDS, ponieważ mają nie tylko znacznie niższe opóźnienia, ale też znacznie wyższą przepustowość. Wynika to głównie z faktu, że UDS jest zoptymalizowany do komunikacji z tym samym serwerem,W przypadku komunikacji IP localhost musi przejść przez stos IP zarówno po stronie nadawcy, jak i odbiorcy

Gniazda TCP/IP są zasobem ograniczonym; Możesz używać maksymalnie 65 535 gniazd jednocześnie. Jeśli dodasz problem, maksymalna liczba TIME_WAIT dostępnych gniazd może być znacznie mniejsza niż ta wartość. Połączenie localhost również zużywa gniazda w tej puli. Użycie UDS sprytnie unika tego problemu; Umożliwia komunikację bez wyczerpywania gniazd TCP/IP.

serwer

Stwórz nowy projekt konsoli .NET 8, zmień SDK na Microsoft.NET.Sdk.Web i skonfiguruj go następująco:

Greet.proto jest skonfigurowany następująco:

Kod jest następujący:

Po rozpoczęciu kompilacji, jak pokazano poniżej:



klient

Stwórz nowy projekt konsolowy .NET 8 i odwołaj się do następujących bibliotek:

Metoda wywoływania interfejsu gRPC jest wywoływana 10 razy, a każde wywołanie trwa 200 milisekund, a kod jest następujący:

Rozpocznij projekt, a po jego zakończeniu, jak pokazano na poniższym rysunku:



Odniesienie:

Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.




Poprzedni:Jetson (1) Jetson Orin Nano Super Developer Kit rozpakowany
Następny:Porównanie sieci i tomcat w pojemniku internetowym w Spring Boot
 Ziemianin| Opublikowano 2025-8-11 20:57:04 |
HttpClientniegRPCoraz komunikację w socketach domenowych Unix

serwer

klient

Jak pokazano poniżej:

 Ziemianin| Opublikowano 2025-8-12 10:05:14 |
ProtocolType.Unspecified: Nie podano protokołu, a system automatycznie go wybiera
 Ziemianin| Opublikowano 2025-8-12 11:02:41 |
Test c# jest w stanie normalnie łączyć się z UDS


 Ziemianin| Opublikowano 16.09.2025 o 15:26:30 |
Wykorzystanie nginx do proxyowania gniazd domenowych Unix (Nie testowane
Konfiguracja wygląda następująco:

Priorytetem jest UDS: Jeśli Twoja usługa działa na tym samym komputerze co Nginx i zależy Ci na wysokiej wydajności oraz niskim opóźnieniu, UDS jest najlepszym wyborem.
 Ziemianin| Opublikowano 2025-9-16 17:11:05 |
Nginx reverse proxy php-fpm wykorzystuje UDS do komunikacji
https://www.itsvse.com/thread-11068-1-1.html
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com