SignalR 填坑记

 

1.发送文字消息没有问题,如何发送文件消息

SignalR可以将参数序列化和反序列化. 这些参数被序列化的格式叫做Hub 协议, 所以Hub协议就是一种用来序列化和反序列化的格式.

Hub协议的默认协议是JSON, 还支持另外一个协议是MessagePack. MessagePack是二进制格式的, 它比JSON更紧凑, 而且处理起来更简单快速, 因为它是二进制的.

但我们使用的版本暂时没有此功能,所以建议还是采用Base64传输。

 

2.发送文件时,如果文件过大,服务端无法接收

Signalr MessageSize默认是64K 大小,设为NULL即禁用这个限制 ,自己也可以按需求改为自己需要的大小

GlobalHost.Configuration.MaxIncomingWebSocketMessageSize = null;

 

3.如果出现内存过高,建议更改此值

GlobalHost.Configuration.DefaultMessageBufferSize = 20;

DefaultMessageBufferSize:默认情况下,SignalR 将保留在内存中的每个中心的每个连接的 1000 条消息。 如果使用大型消息时,这可能会造成内存问题,这可以通过减小此值来缓解这。 此设置可以设置Application_Start事件处理程序在 ASP.NET 应用程序,或在Configuration自承载的应用程序中的 OWIN 启动类的方法。 下面的示例演示如何以减少应用程序,以减少使用的服务器内存量的内存占用减小此值:

 

4.Core与Net Framework间能否通信

Core版本的SignalR 不能与Net Framework版本的通信。所以客户端和服务端 必须是支持Core版本的SignalR。

5.Core版本的SignalR 方法命名方式使用驼峰命名法

以前服务端使用大写,客户端使用小写,现在在Core版本已经统一

 

ignalR技术在 ASP.NET Core 和 ASP.NET下有不同的实现,二者之间是存在差异的。所以在学习之前你应该搞懂他们之间的差异性,这有助你选择合适的框架。

本文知识来源 ASP.NET Core官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/signalr/version-differences?view=aspnetcore-2.2

 

  ASP.NET SignalR ASP.NET Core SignalR
服务器 NuGet 包 Microsoft.AspNet.SignalR Microsoft.AspNetCore.App (.NET Core) Microsoft.AspNetCore.SignalR (.NET Framework)
客户端 NuGet 包 Microsoft.AspNet.SignalR.Client Microsoft.AspNet.SignalR.JS Microsoft.AspNetCore.SignalR.Client
客户端 npm 包 signalr @aspnet/signalr
服务器应用类型 ASP.NET (System.Web) 或 OWIN 自承载 ASP.NET Core
受支持的服务器平台 .NET framework 4.5 或更高版本 .NET Framework 4.6.1 或更高版本 .NET core 2.1 或更高版本

服务端的差异

1、删除 PersistentConnection

了解ASP.NET SignalR的笔友都知道,在此版本中存在PersistentConnection(持久连接)和 Hubs(集线器),PersistentConnection 处于较底层,定义了众多socket操作api。但是在.NET Core 中,微软已经移除了该实现,保留了抽象度更高的Hubs。

2、GlobalHost

在ASP.NET MVC和Web Api 中如果想集成SignalR,我们会使用如下代码获取:

GlobalHost.ConnectionManager.GetHubContext<T>();

但是在.NET Core 中需要使用DI访问HubContext。

3、删除HubState

类似下面这种通过客户端定义变量,服务端可以直接使用的方式,在.NET Core 中已不被支持。

1
2
3
4
5
// 客户端代码(Javascript)
hubProxy.state.UserName="mike"
hubProxy.state.MsgId=1;
 
hubProxy.server.alert("");
1
2
3
4
5
6
// 服务端代码
public Task Alert(string msg)
{
   Console.WriteLine("UserName:"+ Clients.Caller.UserName);
   Console.WriteLine("MsgId:"+ Clients.Caller.MsgId);
}

 

客户端上的差异

1、Javascript客户端的获取方式

在以前的版本中,JavaScript 客户端是通过 Visual Studio 中的 NuGet 包获取的。 Core 版本的 @aspnet/signalr npm 包包含 JavaScript 库。 此包不包括在ASP.NET Core Web 应用程序模板。 使用 npm 获取并安装 @aspnet/signalr npm 包。  

2、已删除对JQuery的依赖

 

3、客户端语法的不同

JavaScript 语法已与 Signalr 早期版本中的相应语法不同。 请使用 HubConnectionBuilder API 而非 $connection 对象创建连接。

4、中心代理

已经不再自动生成代理

posted @ 2019-09-26 17:14  Shikyoh  阅读(2125)  评论(1编辑  收藏  举报