Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 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

Сокети домену Unix

Доменні сокети Unix (UDS), локальні сокети або сокети міжпроцесної комунікації (IPC) — це кінцеві точки комунікації, які обмінюються даними між процесами, що працюють у тій самій операційній системі Unix або подібній до Unix.

Назва доменного сокета Unix стосується значення параметра домену, переданого функції, що створила ресурс системи сокета. Також обирається той самий домен зв'язку. [ 1 ] AF_UNIXAF_LOCAL

Допустимі значення параметрів для typeUDS такі:

  • SOCK_STREAM (порівняно з TCP) – використовується для сокетів, орієнтованих на поток
  • SOCK_DGRAM (порівняно з UDP) – сокет, орієнтований на дейтаграми, для збереження меж повідомлень (як і в більшості реалізацій UNIX, сокети датаграм домену UNIX завжди надійні і не змінюють порядок дейтаграм)
  • SOCK_SEQPACKET (порівняно з SCTP) – послідовні сокети пакетів для з'єднань, які зберігають межі повідомлень і доставляють повідомлення у порядку їх надсилання


Інструмент UDS є стандартним компонентом операційної системи POSIX.

Чому використовують доменні сокети Unix?

Сокети домену Unix дозволяють міжпроцесну комунікацію на одній машині. То чому б обрати їх замість TCP/IP? Наприклад, у TCP/IP можна використовувати loopback адресу (localhost) для зв'язку з одним сервером. Чому на Windows варто обрати їх замість конвеєрів іменувань Windows?

Загалом, існує кілька причин, чому ви можете обрати UDS замість TCP/IP для міжпроцесної комунікації:

  • Сокети домену Unix зазвичай мають менше накладних витрат і вищу швидкість передачі, ніж використання TCP/IP
  • TCP/IP-сокети є обмеженим ресурсом, тоді як доменні сокети Unix не мають жорстких обмежень
  • Сокети домену Unix доступні у файловій формі, тому легко «відкрити» відомі шляхи
  • Інтеграція з файловими системами також додає додатковий рівень безпеки (якщо у вас немає доступу до шляху до файлу, ви не можете отримати доступ до сокета)


Перший момент легко зрозуміти — швидкий пошук у Google покаже, що бенчмарки UDS і TCP/IP завжди кращі за 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 Super
Наступний:Порівняння веб-контейнера netty та tomcat у Spring Boot
 Орендодавець| Опубліковано 2025-8-11 20:57:04 |
HttpClientне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