.net core Microsoft.AspNetCore.signal.Client-启用响应压缩

.net core Microsoft.AspNetCore.signal.Client-启用响应压缩,.net-core,signalr,signalr.client,asp.net-core-signalr,.net Core,Signalr,Signalr.client,Asp.net Core Signalr,我正在开发一个应用程序,它使用Microsoft.AspNetCore.signal.Client来推送消息。我有一个javascript客户端,它与服务器通信。因为我的应用程序可以在不同的互联网速度下使用,所以我希望尽可能地保持传输负载最小 对于正常的HTTP请求和响应,我使用 public class Startup { public void ConfigureServices(IServiceCollection services) { services.

我正在开发一个应用程序,它使用Microsoft.AspNetCore.signal.Client来推送消息。我有一个javascript客户端,它与服务器通信。因为我的应用程序可以在不同的互联网速度下使用,所以我希望尽可能地保持传输负载最小

对于正常的HTTP请求和响应,我使用

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

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseResponseCompression();
    }
}
但当我在互联网上查看Microsoft.AspNetCore.signar.Client时,却找不到任何文档参考或示例。那么,是否可以为Microsoft.AspNetCore.signal.Client启用压缩?如果是的话,怎么办。请帮忙

我的环境

Dotnet core: 3.1.1

如果您想优化低带宽,可以使用MessagePack而不是Json进行负载序列化

MessagePack是一种快速紧凑的二进制序列化格式。它是 当性能和带宽受到关注时非常有用,因为它会 与JSON相比,消息更小。二进制消息无法读取 查看网络跟踪和日志时,除非传递字节 通过MessagePack解析器。信号器内置了对 MessagePack格式,并为客户端和服务器提供API 使用

(摘自)

要使用message pack,您必须在服务器上激活它,如下所示:

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();
有关更多详细信息,请参阅:


所以没有内置的压缩功能?目前还没有,但您可以使用MessagePack获得类似的结果,也可以使用自己的压缩功能。尽管如此,我还是建议测量您的场景是否会从压缩中获益。如果您的消息足够大,情况就是这样。如果你单独发送很多小消息,压缩甚至会增加消息的大小。在某些情况下,没有压缩是一个巨大的问题。。。对我来说,这是一些端点的3-10MB响应与150-300KB响应之间的区别。。。。