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

Добавим провайдер сжатия

Мы можем определить кастомный провайдер сжатия передаваемых данных.

Для примера, добавим провайдер, реализующий алгоритм Brotli.

using System.IO.Compression;
using Grpc.Net.Compression;

namespace CountryService.gRPC.Compression;

public class BrotliCompressionProvider : ICompressionProvider
{
    private readonly CompressionLevel? _compressionLevel;

    public BrotliCompressionProvider(CompressionLevel compressionLevel)
    {
        _compressionLevel = compressionLevel;
    }

    public BrotliCompressionProvider() { }

    public Stream CreateCompressionStream(Stream stream, CompressionLevel? compressionLevel)
    {
        var currentCompressionLevel = compressionLevel ?? _compressionLevel ?? CompressionLevel.Fastest;

        return new BrotliStream(stream, currentCompressionLevel, true);
    }

    public Stream CreateDecompressionStream(Stream stream)
    {
        return new BrotliStream(stream, CompressionMode.Decompress);
    }

    public string EncodingName => "br"; //Это же должно быть указано в grpc-accept-encoding
}

Теперь добавляем опции к методу AddGrpc:
builder.Services.AddGrpc(options =>
{
    options.MaxReceiveMessageSize = 6291456; // 6 Mb
    options.MaxSendMessageSize = 6291456; // 6 Mb
    options.CompressionProviders = new ICompressionProvider[] 
    {
        new BrotliCompressionProvider(CompressionLevel.Optimal)
    };
    options.ResponseCompressionAlgorithm = "br"; //задаём grpc-accept-encoding, соответствует указанному в провайдере
    options.ResponseCompressionLevel = CompressionLevel.Optimal;
});


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

Комментарии

Комментарии