问题描述
我正在开发一个使用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();
有关更多详细信息,请参见: