Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 658|Ответ: 5

[Чаевые] Процессы .NET/C# взаимодействуют между сокетами доменов gRPC и Unix

[Скопировать ссылку]
Опубликовано 2025-8-11 20:24:04 | | | |
Требования: На одном сервере процессы взаимодействуют друг с другом с помощью анонимных конвейеров, именованных конвейеров, файлов отображения памяти, HTTP, TCP, стандартных потоков ввода/вывода и др. Иногда серверам нужно развертывать несколько приложений, и приложения могут взаимодействовать друг с другом с помощью сокетов доменов gRPC и Unix.

обзор
.NET/C# NamedPipe-based 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 можно использовать обратный адрес (localhost) для связи с одним сервером. В Windows почему вы выбираете их вместо Windows Naming Pipelines?

В целом, существует несколько причин, по которым вы можете выбрать UDS вместо TCP/IP для межпроцессной коммуникации:

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


Первый момент прост для понимания — быстрый поиск в Google покажет, что бенчмарки UDS и TCP/IP всегда лучше UDS, потому что у них не только значительно меньшая задержка, но и значительно выше пропускная способность. Это в основном связано с тем, что UDS оптимизирован для связи с одним и тем же сервером,Для IP-коммуникации локальный хост должен проходить через 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 Developer Kit, распакованный
Следующий:Сравнение веб-контейнера netty и tomcat в Spring Boot
 Хозяин| Опубликовано 2025-8-11 20:57:04 |
HttpClientнеgRPCи коммуникация через сокеты Unix

сервер

клиент

Как показано ниже:

 Хозяин| Опубликовано 2025-8-12 10:05:14 |
ProtocolType. Неуточнённый: Протокол не указывается, и система автоматически его выбирает
 Хозяин| Опубликовано 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