Microsoft.AspNetCore.SignalR.Client-启用响应压缩

问题描述

我正在开发一个使用Microsoft.AspNetCore.SignalR.Client作为推送消息的应用程序。我有一个与服务器对话的JavaScript客户端。由于我的应用程序可以在不同的Internet速度下使用,因此我希望将传输负载保持在最低水平。

对于普通的HTTP请求和响应,我已通过使用启用压缩

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddResponseCompression();
    }

    public void Configure(IApplicationBuilder app,IHostingEnvironment env)
    {
        app.UseResponseCompression();
    }
}

但是,当我在互联网上寻找与Microsoft.AspNetCore.SignalR.Client相同的方法时,找不到任何文档参考或任何示例。那么是否可以为Microsoft.AspNetCore.SignalR.Client启用压缩?如果是这样的话。请帮忙。

我的环境

Dotnet core: 3.1.1

解决方法

如果要优化低带宽,可以使用MessagePack代替Json进行有效负载序列化。

MessagePack是一种快速而紧凑的二进制序列化格式。它的 当性能和带宽成为问题时非常有用,因为它会 与JSON相比,消息较小。二进制消息不可读 在查看网络跟踪和日志时,除非传递字节 通过MessagePack解析器。 SignalR内置了对 MessagePack格式,并为客户端和服务器提供API 使用。

(摘自here)。

要使用消息包,您必须在服务器上将其激活,如下所示:

services.AddSignalR()
    .AddJsonProtocol(options => {
        options.PayloadSerializerOptions.PropertyNamingPolicy = null
    });

在客户端上,您必须安装适当的npm软件包

npm install @microsoft/signalr-protocol-msgpack

,然后适当地初始化您的连接:

const connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .withHubProtocol(new signalR.protocols.msgpack.MessagePackHubProtocol())
    .build();

有关更多详细信息,请参见:

https://docs.microsoft.com/en-us/aspnet/core/signalr/configuration?view=aspnetcore-3.1&tabs=dotnet#jsonmessagepack-serialization-options-1

https://docs.microsoft.com/en-us/aspnet/core/signalr/messagepackhubprotocol?view=aspnetcore-3.1#configure-messagepack-on-the-client-1