Українська
Підсумки
Висновки
Розподілена система складається з процесів без спільної пам’яті, які обмінюються повідомленнями, а мережа ненадійна, має затримку й обмежену пропускну здатність. Сокети дають найнижчий рівень доступу: TCP забезпечує надійний упорядкований потік байтів, тому прикладний протокол має визначати межі повідомлень і формат даних; UDP передає окремі дейтаграми без гарантій, зате підтримує широкомовні та групові розсилки. Асинхронні методи AcceptTcpClientAsync, ReadAsync і WriteAsync дозволяють обслуговувати тисячі клієнтів невеликою кількістю потоків. Надійний мережевий код використовує таймаути, повторні спроби з експоненційною затримкою, keep-alive і коректне закриття з’єднань. Віддалений виклик процедур приховує мережу за стабами, згенерованими з опису інтерфейсу, але не скасовує часткових відмов, тому важливі семантика викликів та ідемпотентність. WCF описує кінцеву точку адресою, прив’язкою і контрактом; у сучасному .NET його сервіси переносять на CoreWCF або замінюють на gRPC. gRPC використовує HTTP/2 і Protocol Buffers, підтримує унарні й потокові виклики, дедлайни, метадані, коди статусу та перехоплювачі.
Питання для самоперевірки
- Чим розподілена система відрізняється від багатопотокової програми? Назвіть моделі взаємодії.
- Які хибні припущення розподілених обчислень ви знаєте?
- Чим відрізняються протоколи TCP і UDP? Коли обирають UDP?
- Що таке IP-адреса, порт і кінцева точка? Що означає прив’язка до
0.0.0.0? - Опишіть послідовність викликів сокетів TCP-сервера та клієнта.
- Чим
TcpListenerіTcpClientвідрізняються від класуSocket? - Як асинхронний сервер обслуговує багатьох клієнтів? Чому не використовують потік на клієнта?
- Що таке кадрування повідомлень? Порівняйте роздільник і префікс довжини.
- Що повертає
ReceiveAsync, якщо інша сторона закрила з’єднання? - Чим відрізняються широкомовна та групова розсилки UDP?
- Як задати таймаут асинхронної мережевої операції? Для чого експоненційна затримка і «джитер» у повторних спробах?
- Опишіть кроки віддаленого виклику процедури. Яку роль відіграють стаби та IDL?
- Що таке семантика at-most-once та at-least-once? Як зробити операцію безпечною для повторів?
- Що означають літери A, B, C кінцевої точки WCF? Навіщо потрібен CoreWCF?
- Які переваги дає gRPC використання HTTP/2 і Protocol Buffers? Чому номери полів у
.protoне можна змінювати? - Назвіть чотири типи викликів gRPC і наведіть приклад застосування кожного.
- Що відбувається на клієнті та сервері, коли минає дедлайн виклику gRPC?
- Для чого призначені метадані, перехоплювачі та gRPC reflection?
Корисні посилання
- Мережеве програмування в .NET: https://learn.microsoft.com/dotnet/fundamentals/networking/overview
- Сервіси на сокетах: https://learn.microsoft.com/dotnet/fundamentals/networking/sockets/socket-services
- Класи TCP: https://learn.microsoft.com/dotnet/fundamentals/networking/sockets/tcp-classes
System.IO.Pipelines: https://learn.microsoft.com/dotnet/standard/io/pipelines- gRPC на .NET: https://learn.microsoft.com/aspnet/core/grpc/
- Основні поняття gRPC: https://grpc.io/docs/what-is-grpc/core-concepts/
- Мова Protocol Buffers (proto3): https://protobuf.dev/programming-guides/proto3/
- Дедлайни та скасування gRPC: https://learn.microsoft.com/aspnet/core/grpc/deadlines-cancellation
- Тестування gRPC: reflection, grpcurl: https://learn.microsoft.com/aspnet/core/grpc/test-tools
- CoreWCF: https://github.com/CoreWCF/CoreWCF
- Політика підтримки CoreWCF: https://dotnet.microsoft.com/platform/support/policy/corewcf
- HTTP Client у Rider: https://www.jetbrains.com/help/rider/Http_client_in__product__code_editor.html