【问题标题】:Microsoft.AspNetCore.SignalR.Client - Enable Response compressionMicrosoft.AspNetCore.SignalR.Client - 启用响应压缩
【发布时间】:2020-08-24 13:32:48
【问题描述】:

我正在开发一个使用 Microsoft.AspNetCore.SignalR.Client 推送消息的应用程序。我有一个与服务器对话的 javascript 客户端。由于我的应用程序可以在不同的互联网速度下使用,我希望尽可能减少传输负载。

对于正常的 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

【问题讨论】:

    标签: .net-core signalr signalr.client asp.net-core-signalr


    【解决方案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

    【讨论】:

    • 所以没有可用的内置压缩?
    • 暂时没有,但您可以使用 MessagePack 获得类似的结果,也可以自行压缩。不过,我建议测量您的方案是否会完全受益于压缩。如果您的消息足够大,就会出现这种情况。如果您分别发送大量小消息,压缩甚至会增加消息的大小。
    • 在某些情况下没有压缩是一个大问题...对我来说,这是 3-10MB 响应与 150-300KB 响应对于某些端点的区别...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    相关资源
    最近更新 更多