Изисквания: На един и същи сървър процесите комуникират помежду си чрез анонимни конвейери, именувани конвейери, файлове за картографиране на паметта, 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 можете да използвате 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 милисекунди, а кодът е следният:
Започнете проекта и след завършване на изпълнението, както е показано на фигурата по-долу:
Препратка:
Входът към хиперлинк е видим.
Входът към хиперлинк е видим. |