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
我不知道你所说的“不推荐”是什么意思,但这是微软的实现。如果您认为他们没有遵循实施细节的最佳实践,您现在可以在他们的 GitHub 页面中向他们提出。你的语法不会改变。您只是打开该功能。
这是我的起始配置供参考:
builder.Services.AddSignalR(hubOptions =>
{
hubOptions.EnableDetailedErrors = true;
})
.AddMessagePackProtocol(messagePackOptions =>
{
messagePackOptions.SerializerOptions = MessagePackSerializerOptions.Standard
.WithCompression(MessagePackCompression.Lz4Block)
.WithSecurity(MessagePackSecurity.UntrustedData);
});