Rez*_*zga 5 .net c# msgpack signalr asp.net-core
MessagePack for C#的文档指出,使用 LZ4 压缩可以实现有效负载的紧凑二进制大小。在文档中您可以使用:
var lz4Options = MessagePackSerializerOptions.Standard.WithCompression(MessagePackCompression.Lz4BlockArray);
MessagePackSerializer.Serialize(obj, lz4Options);
Run Code Online (Sandbox Code Playgroud)
所以它基本上说,在调用每个Serialize()和Deserialize()方法时,您应该专门指定压缩选项。
但是,在使用.NET Signalr时,您不会直接调用这些方法。Nuget 包 Microsoft.AspNetCore.SignalR.Protocols会为您完成此操作。您只需在ConfigureServices()方法中告诉应用程序serviceCollection 执行此操作:
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR().AddMessagePackProtocol();
}
Run Code Online (Sandbox Code Playgroud)
所以我很好奇如何为信号器指定MessagePackSerializationOptions以使用 LZ4 压缩。我已经尝试更改应用程序主要方法中的默认选项配置:
MessagePackSerializer.DefaultOptions = MessagePackSerializerOptions.Standard.WithCompression(MessagePackCompression.Lz4BlockArray);
Run Code Online (Sandbox Code Playgroud)
但首先不推荐,其次它似乎不起作用:D
在 main 方法中,使用构建器模式,您需要在 lambda 表达式中指定选项。
我不知道你所说的“不推荐”是什么意思,但这是微软的实现。如果您认为他们没有遵循实施细节的最佳实践,您现在可以在他们的 GitHub 页面中向他们提出。你的语法不会改变。您只需打开该功能即可。
这是我的起始配置供参考。
轮毂侧:
builder.Services.AddSignalR(hubOptions =>
{
hubOptions.EnableDetailedErrors = true;
})
.AddMessagePackProtocol(messagePackOptions =>
{
messagePackOptions.SerializerOptions = MessagePackSerializerOptions.Standard
.WithCompression(MessagePackCompression.Lz4Block)
.WithSecurity(MessagePackSecurity.UntrustedData);
});
Run Code Online (Sandbox Code Playgroud)
客户端:
_connection = new HubConnectionBuilder()
.WithUrl(HubUrl, options =>
{
// Configure authentication here:
options.UseDefaultCredentials = true;
})
.AddMessagePackProtocol(options =>
{
options.SerializerOptions = MessagePackSerializerOptions.Standard
.WithCompression(MessagePackCompression.Lz4Block)
.WithSecurity(MessagePackSecurity.UntrustedData);
})
.ConfigureLogging(logging =>
{
logging.ClearProviders()
.SetMinimumLevel(LogLevel.Debug)
.AddFilter("Microsoft.AspNetCore.SignalR", LogLevel.Debug)
.AddFilter("Microsoft.AspNetCore.Http.Connections", LogLevel.Debug)
;
})
.WithAutomaticReconnect()
.Build();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2260 次 |
| 最近记录: |