小编Mor*_*eat的帖子

C# 中的 gRPC 压缩

使用 C# 时是否可以控制 gRPC 中的响应消息压缩?

这个问题收到了评论,但没有答案。该评论指向gRPC 问题 #10902,其中说:

功能在那里,但您需要通过设置适当的通道选项或在您的 RPC 中设置元数据条目来[启用?]。

链接到那里的测试类显示了几种可能性:

new WriteOptions(WriteFlags.NoCompress)
Run Code Online (Sandbox Code Playgroud)

但这对我没有影响:无论此设置如何,WAN 上的呼叫都需要相同的时间。

var compressionMetadata = new Metadata
{
    { new Metadata.Entry(Metadata.CompressionRequestAlgorithmMetadataKey, "gzip") }
};
Run Code Online (Sandbox Code Playgroud)

同样,测试显示更改此设置时呼叫时间没有变化。(CompressionRequestAlgorithmMetadataKey常量是内部的,我反编译得到字符串值)。

C# github repo 中有一个诱人的CompressionLevel枚举但我找不到它的任何用法。

gRPC 问题 #4170(在 C# 中实现压缩支持)已关闭,但表示

它可以在 C# 中完成,但它绝对不是用户友好的

有没有人能帮我举个例子来说明如何做到这一点?如果它不是用户友好的,我不介意,我只是希望能够做到!我正在通过网络发送一些大的(~8Mb)响应,我想对它们进行一些控制。虽然我可以在发送之前压缩数据,但允许客户端对使用的方法/压缩级别进行一些控制会很好。

(我会发布一些代码,但我只是使用带有大型硬编码字符串的C# 示例代码中的测试代码)

tl;dr 我不知道如何使用 C# gRPC 控制压缩设置。所有看起来可能的设置都不会影响通过线路发送响应所花费的时间。




编辑
在 Jon Skeet 关于查看有线流量的评论之后,我运行了一个新测试,其中响应是The quick brown fox jumps over the lazy dog重复 5000 …

c# compression grpc

7
推荐指数
1
解决办法
2578
查看次数

标签 统计

c# ×1

compression ×1

grpc ×1