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线 ...
随机推荐
- react native开源库管理
安装: 1,正确的安装方式是 npm install xxx --save,经常看到许多组件安装文档上后面没有 --save,如果没有建议加上 否则组件信息不会出现在package.json中,导入组 ...
- servlet 容器与servlet
servlet代表应用 解析Tomcat内部结构和请求过程 https://www.cnblogs.com/zhouyuqin/p/5143121.html servlet的本质是什么,它是如何工作的 ...
- 硬币游戏1——打表&&记忆化搜索
题目 Alice和Bo在玩这样一个游戏,给定 $k$ 个数字 $a_1, a_2,..,a_k$.一开始有 $x$ 枚硬币,Alice和Bob轮流取硬币.每次所取的硬币的枚数一定要在 $k$ 个数当中 ...
- [Algorithm] 46. Permutations
Given a collection of distinct integers, return all possible permutations. Example: Input: [1,2,3] O ...
- vue项目开发期间,配置webpack解决后台接口在不同服务器上的问题 之 二 ( node搭建服务 )
由于今天上午 后端人员把接口都整合都一个服务器了,所以就没有硬关注 上一篇文章的问题, 晚上回来,用node搭了一个简单服务器,测试了下,是没有问题的.代码如下: 一. 自己初始化项目, 1.pack ...
- Supercharging your ETL with Airflow and Singer
转自:https://www.stitchdata.com/blog/supercharging-etl-with-airflow-and-singer/ singer 团队关于singer 与air ...
- div模拟textarea且高度自适应
需求 我们知道文本超出 textarea 高度后,textarea 就会出现滚动条,需求就是让 textarea 高度跟随文本高度变化,屏蔽滚动条,原来做过用js去监听文本行数,然后改变文本框的高度, ...
- Shared Virtual Memory (SVM) Functions
Description Shared Virtual Memory (SVM) (Glossary): An address space exposed to both the host and th ...
- 「BJOI2018」治疗之雨
传送门 Description 有\(m+1\)个数,第一个数为\(p\),每轮:选一个数\(+1\),再依次选\(k\)个数\(-1\) 要求如果第一个数\(=N\),不能选它\(+1\),如果第一 ...
- [后渗透]Windows server 80端口复用后门
0x01 简介 该后门的基本原理是使用Windows 的远程管理管理服务WinRM,组合HTTP.sys驱动自带的端口复用功能,一起实现正向的端口复用后门. 具体细节信息请参考:https://pap ...