Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 819|Отговор: 5

[Бакшиши] .NET/C# процесите комуникират между gRPC и Unix домейн сокети

[Копирай линк]
Публикувано в 11.08.2025 г. 20:24:04 ч. | | | |
Изисквания: На един и същи сървър процесите комуникират помежду си чрез анонимни конвейери, именувани конвейери, файлове за картографиране на паметта, HTTP, TCP, стандартни входно/изходни потоци и др. Понякога сървърите трябва да внедрят множество приложения, а приложенията могат реално да комуникират помежду си чрез gRPC и Unix домейн сокети.

преглед
.NET/C# 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 Nameing Pipelines?

Общо взето, има няколко причини, поради които може да изберете да използвате 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 Developer комплект разопакован
Следващ:Сравняване на web container netty и tomcat в Spring Boot
 Хазяин| Публикувано в 11.08.2025 г. 20:57:04 ч. |
HttpClientнеgRPCи комуникация чрез Unix домейн сокет

сървър

клиент

Както е показано по-долу:

 Хазяин| Публикувано в 12.08.2025 г. 10:05:14 ч. |
ProtocolType. Неуточнен: Не е посочен протокол и системата го избира автоматично
 Хазяин| Публикувано в 12.08.2025 г. 11:02:41 ч. |
C# тестът може да се свърже нормално с UDS


 Хазяин| Публикувано в 16.09.2025 г. 15:26:30 ч. |
Използване на nginx за прокси на Unix домейн сокети (Не е тествано
Конфигурацията е следната:

Приоритизирайте UDS: Ако услугата ви е на същия компютър като Nginx и търсите висока производителност и ниска латентност, UDS е най-добрият избор.
 Хазяин| Публикувано в 16.09.2025 г. 17:11:05 ч. |
Nginx reverse proxy php-fpm използва UDS за комуникация
https://www.itsvse.com/thread-11068-1-1.html
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com