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、中心代理
已经不再自动生成代理
SignalR 填坑记的更多相关文章
- UiAutomator2.0升级填坑记
UiAutomator2.0升级填坑记 SkySeraph May. 28th 2017 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph个人站点:www.sk ...
- Android项目开发填坑记-Fragment的onBackPressed
Github版 CSDN版 知识背景 Fragment在当前的Android开发中,有两种引用方式,一个是 Android 3.0 时加入的,一个是supportV4包中的.这里简称为Fragment ...
- Android项目开发填坑记-Fragment的onAttach
背景 现在Android开发多使用一个Activity管理多个Fragment进行开发,不免需要两者相互传递数据,一般是给Fragment添加回调接口,让Activity继承并实现. 回调接口一般都写 ...
- Android项目开发填坑记-so文件引发的攻坚战
故事的最初 我负责的项目A要求有播放在线视频的功能,当时从别人的聊天记录的一瞥中发现百度有相关的SDK,当时找到的是Baidu-T5Player-SDK-Android-1.4s,项目中Demo的so ...
- minikube windows hyperx填坑记
minikube windows hyperx填坑记 安装了一天半,还是没行,先放弃 开始 minikube start --vm-driver=hyperv --hyperv-virtual-swi ...
- 浅谈html5 video 移动端填坑记
这篇文章主要介绍了浅谈html5 video 移动端填坑记,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 本文介绍了html5 video 移动端填坑记,分享给大家,具体 ...
- Java web 开发填坑记 2 -如何正确的创建一个Java Web 项目
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72566261 本文出自[赵彦军的博客] Java web 开发填坑记 1-如何正确 ...
- Appium+python自动化(十三)- 输入中文 - 一次填坑记(超详解)
简介 无论你在哪里,在做什么都会遇到很多坑,这些坑有些事别人挖的,有些是自己挖的.别人挖的叫坑人,自己挖的叫自杀,儿子挖的叫坑爹.因此在做app自动化道路上也不会是一帆风顺的,你会踩很多坑,这些坑和你 ...
- Cloudera Manager 5.9 和 CDH 5.9 离线安装指南及个人采坑填坑记
公司的CDH早就装好了,一直想自己装一个玩玩,最近组了台电脑,笔记本就淘汰下来了,加上之前的,一共3台,就在X宝上买了CPU和内存升级了下笔记本,就自己组了个集群. 话说,好想去捡垃圾,捡台8核16线 ...
随机推荐
- python + redis +ipset实现IP黑名单的动态添加及解封禁
1.抽空用python做了一个 动态添加/删除IP黑名单 的程序(或者说实现方案),项目地址: https://gitee.com/lowmanisbusy/ip_blacklists, 2.这里的实 ...
- spring、springMvc、springBoot和springCloud的联系与区别
spring和springMvc: 1. spring是一个一站式的轻量级的java开发框架,核心是控制反转(IOC)和面向切面(AOP),针对于开发的WEB层(springMvc).业务层(Ioc) ...
- spring是什么?
spring是什么? 1.编程范式的实践 dsl.注解.aop技术,扩展java语言的表达能力: dsl:xml配置+注解配置,扩展工程的组织能力: 2.基础组件: 常用组件的便捷封装,方便进行二次开 ...
- windows10家庭版升级专业版/企业版
以防万一,还是把Windows10家庭版的密钥保存下来. 一.保留原密钥 1. Win+R,输入regedit 2. 进入目录 HKEY_LOCAL_MACHINE\SOFTWARE\Microsof ...
- MySQL binlog2sql实现MySQL误操作的恢复
对于MySQL数据库中的误操作删除数据的恢复问题,可以使用基于MySQL中binlog做到类似于闪回或者生成反向操作的SQL语句来实现,是MySQL中一个非常实用的功能.原理不难理解,基于MySQL的 ...
- 使用google autoservice 自动生成java spi 描述文件
spi 是一种服务发现的标准,对于开发中我们通常需要编写 META-INF/services 文件夹中定义的类. google auto 中的autoservice 可以帮助我们生成对应的配置,很方便 ...
- 【CF765F】Souvenirs
[CF765F]Souvenirs 题面 洛谷 题解 我们可以发现,对于某个右端点\(i\),左端点\(j\)在由\(i\rightarrow 1\)的过程中,每一段的答案是单调不增的,由这个性质,我 ...
- SVN cornerstone Commit\Update 提示xxx is already Locked解决方法
点击菜单栏“working copy” 点“clean”: 或者,如下图: 右击,点击“clean”,问题解决.
- 如何新建WebAPI,生成注释,TestAPI的项目
一.新建WebAPI的项目 1. 在Web下,ASP.NET Web 应用程序,点击确定 2. 点击确定 3. 如图所示, 新建Controller 4 . 运行项目 二.注释 1. 在生成中,勾选x ...
- java中过滤器(Filter)与拦截器(Interceptor )区别
过滤器(Filter) Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是设置字符集.控制权限.控制转向.做一些业务逻辑判断等.其工作 ...