Требования: На одном сервере процессы взаимодействуют друг с другом с помощью анонимных конвейеров, именованных конвейеров, файлов отображения памяти, HTTP, TCP, стандартных потоков ввода/вывода и др. Иногда серверам нужно развертывать несколько приложений, и приложения могут взаимодействовать друг с другом с помощью сокетов доменов gRPC и Unix.
обзор
Сокеты домена 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 миллисекунд, и код выглядит следующим образом:
Начинайте проект, и после завершения выполнения, как показано на рисунке ниже:
Ссылка:
Вход по гиперссылке виден.
Вход по гиперссылке виден. |