Канал gRPC¶
Запросы к серверу gRPC делаются посредством каналов (channels). Канал gRPC используется для подключения к серверу. Для инициализации Каналу требуется следующая информация:
- Адрес удалённого хоста
- Порт
- Аутентификационная информация (credentials)
Поддерживаются три вида соединений:
- SSL/TLS — Secure Sockets Layer и Transport Layer Security — криптографические протоколы, шифрующие данные и аутентифицирующие соединение при передаче данных через Интернет. Для использования SSL/TLS необходимо установить SSL/TLS сертификат на веб сервер, содержащий открытый и закрытый ключи для аутентификации сервера и шифрования данных.
- ALTS — Application Layer Transport Security — протокол аутентификации и шифрования, разработанный Google и использующий систему обмена ключами Диффи-Хеллмана. Похож на TLS, но сертификаты должны быть и у сервера, и у клиента.
- Аутентификация на основе токена — аутентифицирует пользователя при помощи JWT.
Чаще всего аутентификационные данные передаются непосредственно при вызовах процедур, особенно при использовании токенов. В .NET реализации gRPC это поведение инкапсулировано в специальной реализации клиента. Вам необходимо только добавить ваш токен к заголовкам запроса в момент вызова процедуры.
Также канал поддерживает ограничение максимального размера отправляемых и получаемых сообщений1.
Пример показывает создание канала на C# с использованием особого сертификата SSL и ограничением получаемых сообщений в 5Мб
var channel = new Channel(
"https://localhost:5001",
new SslCredentials("myCertificate.pem"),
new []
{
new ChannelOption("grpc.max_receive_message_length", "5242880") //5Mb
});
var countryClient = new CountryServiceClient(channel);
А это пример показывает создание такого же канала, но без аутентификации и шифрования
var channel = new Channel(
"https://localhost:5001",
ChannelCredentials.Insecure,
new []
{
new ChannelOption("grpc.max_receive_message_length", "5242880") //5Mb
});
var countryClient = new CountryServiceClient(channel);
При использовании созданного Канала, мы можем проверить его состояние. У объекта канала есть свойство
State с такими возможными значениями:
Idle;Connecting;Ready;TransientFailure— произошла ошибка, не являющаяся фатальной, и канал может быть снова использован после возвращение в состояниеReady(например, после вызова методаConnectAsync());Shutdown— произошла фатальная ошибка, или канал был закрыт программно.
Последнее обновление :
6 апреля 2023 г.
Дата создания : 6 апреля 2023 г.
Дата создания : 6 апреля 2023 г.