您好,出色的 Blazor 和 SignalR 专家!
我的目标是通过正确配置“MessagePack”,在带有 SignalR 的 ASP.NET Core 服务器和 Blazor WebAssembly 之间添加(希望是压缩的)二进制消息传递
消息传递在两个方向上都完全可操作,但我在浏览器的网络监视器中注意到 SignalR 使用的 websocket 仍然通过 JSON 和 Base64 发送消息。我的流不仅没有按照服务器端配置进行压缩,而且 Base64 丢弃了 8 位中的 2 位,导致管道效率下降了约 28%。
据我了解,“MessagePack”协议可用于启用完整的二进制通信(删除 JSON / Base64 的使用),并且我一直在关注 https://learn.microsoft.com/en-us 上的相关文章/aspnet/core/signalr/messagepackhubprotocol
按照上述说明中的建议,这是我的服务器端 WebApplication 构建器中的当前代码:
.AddMessagePackProtocol(options => {
options.SerializerOptions = MessagePackSerializerOptions.Standard
.WithResolver(MessagePack.Resolvers.StandardResolver.Instance)
.WithSecurity(MessagePackSecurity.UntrustedData)
.WithCompression(MessagePackCompression.Lz4Block)
.WithCompressionMinLength(256);
});
但是,相同的说明提到将以下内容添加到我的“.net 客户端”...
var hubConnection = new HubConnectionBuilder()
.WithUrl("/chathub")
.AddMessagePackProtocol()
.Build();
不幸的是,我的 WebAssembly 工作所基于的示例没有 HubConnectionBuilder 对象的概念,并按如下方式创建其构建器:
var builder = WebAssemblyHostBuilder.CreateDefault(args);
尝试了我能想到的一切,我找不到找到“WebAssemblyHostBuilder”的子对象的方法,我可以在其中调用“AddMessagePackProtocol()”,以便 MessagePack 也可以在客户端工作
我的直觉是,服务器端已正确配置(压缩)MessagePack,但 Web 程序集客户端未正确配置,因此我仍然收到 JSON + Base64 消息传递。 (我可以在没有 MessagePack 内的压缩支持的情况下生活,但希望失去由 JSON + Base64 导致的 28% 管道效率下降)
关键问题:
非常感谢您提供的任何提示!
让-皮埃尔
感谢布伦南的精彩提示,找到了它!
出于某种原因,我只查看客户端的顶级文件,认为需要在那里配置 SignalR,因为它是在服务器端完成的。当然,初始化 SignalR 的代码位于任何需要它的给定 Razor 页面中,因此我能够按照 Microsoft 的建议完成说明,宾果游戏!
这是我的 Web 客户端 Razor 页面的 OnInitializedAsync() 中的代码(与我的服务器端相同):
protected override async Task OnInitializedAsync() {
g_oHubConn = new HubConnectionBuilder()
.WithUrl(Navigation.ToAbsoluteUri("/datumhub"))
.AddMessagePackProtocol(options => {
options.SerializerOptions = MessagePackSerializerOptions.Standard
.WithResolver(MessagePack.Resolvers.StandardResolver.Instance)
.WithSecurity(MessagePackSecurity.UntrustedData)
.WithCompression(MessagePackCompression.Lz4Block)
.WithCompressionMinLength(256);})
.Build();
more...
尽管全自动压缩很酷,但它在带宽上的效率不如使用正常的 .net Deflate 调用来压缩/解压缩自己。 (我使用 SignalR + Messagepack 得到了 2.99 X 的压缩,但使用手动调用得到了更高的 7.55 X)
感谢布伦南(Brennan)对此的提示......你摇滚老兄!