Перейти к содержанию

Канал gRPC

Запросы к серверу gRPC делаются посредством каналов (channels). Канал gRPC используется для подключения к серверу. Для инициализации Каналу требуется следующая информация:

  • Адрес удалённого хоста
  • Порт
  • Аутентификационная информация (credentials)

Поддерживаются три вида соединений:

  • SSL/TLSSecure Sockets Layer и Transport Layer Security — криптографические протоколы, шифрующие данные и аутентифицирующие соединение при передаче данных через Интернет. Для использования SSL/TLS необходимо установить SSL/TLS сертификат на веб сервер, содержащий открытый и закрытый ключи для аутентификации сервера и шифрования данных.
  • ALTSApplication 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 — произошла фатальная ошибка, или канал был закрыт программно.

  1. Все возможные опции можно посмотреть здесь 


Последнее обновление : 6 апреля 2023 г.
Дата создания : 6 апреля 2023 г.

Комментарии

Комментарии