通过 .NET Signalr 使用消息包 + LZ4 压缩

问题描述 投票:0回答:1

C#MessagePack 的文档指出,使用 LZ4 压缩,您可以实现有效负载的紧凑二进制大小。在文档中您可以使用:enter code here


var lz4Options = MessagePackSerializerOptions.Standard.WithCompression(MessagePackCompression.Lz4BlockArray); MessagePackSerializer.Serialize(obj, lz4Options);

所以它基本上是说,在调用每个 
Serialize()

Deserialize() 方法时,您应该专门指定压缩选项。 但是在使用

.NET Signalr

时,您不会直接调用这些方法。 Nuget 包 Microsoft.AspNetCore.SignalR.Protocols 可以为你做到这一点。您只需在 ConfigureServices() 方法中告诉应用程序 serviceCollection 这样做: public void ConfigureServices(IServiceCollection services) { services.AddSignalR().AddMessagePackProtocol(); }

所以我很好奇如何指定 
MessagePackSerializationOptions

以便信号器使用 LZ4 压缩。 我已经尝试更改应用程序主方法中的默认选项配置: MessagePackSerializer.DefaultOptions = MessagePackSerializerOptions.Standard.WithCompression(MessagePackCompression.Lz4BlockArray);

但首先不推荐,其次它似乎不起作用:D

c# .net asp.net-core signalr msgpack
1个回答
0
投票

我不知道你所说的“不推荐”是什么意思,但这是微软的实现。如果您认为他们没有遵循实施细节的最佳实践,您现在可以在他们的 GitHub 页面中向他们提出。你的语法不会改变。您只是打开该功能。

这是我的起始配置供参考:

builder.Services.AddSignalR(hubOptions => { hubOptions.EnableDetailedErrors = true; }) .AddMessagePackProtocol(messagePackOptions => { messagePackOptions.SerializerOptions = MessagePackSerializerOptions.Standard .WithCompression(MessagePackCompression.Lz4Block) .WithSecurity(MessagePackSecurity.UntrustedData); });

© www.soinside.com 2019 - 2024. All rights reserved.