由于要转 .NET Core ,对于以前用到的一些进行迁移。

在迁移 SignalR 的时候发现 .NET Core 下的和 .NET 下的区别还是挺大的。

一、功能差异

自定重新连接

.NET 下的 SignalR 有重连的机制,在客户端断开连接,SignalR 会尝试重新连接到服务器。

.NET Core 下不支持自动重连机制,如果需要重连,需要客户端显示的启动新的连接。

协议支持

.NET Core 不仅支持JSON格式,还支持一种基于 MassagePack 的二进制协议,同时还可以自定义协议。

二、服务器上的差异

SignalR 映射到管道

.NET 下映射

public class Startup
{
public void Configuration(IAppBuilder app)
{
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=316888
app.UseCors(CorsOptions.AllowAll); var hubConfig = new HubConfiguration() { EnableJavaScriptProxies = false };
app.MapSignalR(hubConfig); // 配置集群底板数据库
RedisConfiguration redisConfig = RedisSectionHandler.GetConfig();
GlobalHost.DependencyResolver.UseRedis(redisConfig.RedisHosts[].Host, redisConfig.RedisHosts[].Port, redisConfig.Password, "signalR_loginHub");
}
}

.NET Core 下的映射和路由

        public void ConfigureServices(IServiceCollection services)
{
// 添加到依赖关系注入系统
services.AddSignalR();
} public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// 添加到中间件管道
app.UseSignalR(routes =>
{
routes.MapHub<ChatHub>("/chatHub");
});
}

集线器的实现

.NET 下方法的实现:客户端的方法直接在 HubConnectionContext 下的对象直接"."出客户端的方法,客户端再注册

public void Send(string msg)
{
// 调用所有客户注册的本地JS方法
Clients.All.ReceiveMessage(msg);
     }

.NET Core 下方法实现:客户端的方法是在 HubCallerClients 下的对象调用 “SendAsync”进行方法注册,方法名作为参数进行传入

        public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}

三、客户端的差异

.NET 下的 SignalR 客户端是依赖 JQuery 用 JS 写的

.NET Core SignalR 客户端是托管于 npm 用 TypeScript ,在使用的时候需要引用的 JS 文件较少

创建连接的不同

.NET 下使用 $.connection

$.connection.hub.url = "http://localhost:10110/signalr";

var chat = $.connection.chatHub;

.NET Core 下使用 HubConnectionBuilder

var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();

以及错误的捕获和处理上

connection.start().catch(function (err) {
return console.error(err.toString());
});

对于客户端方法的注册,.NET Core 和 .NET 下的不使用代理的一致,具体可以看  “SignalR 初体验

本文章参考微软官方文档:“比较 SignalR 和 SignalR Core

.NET Core SignalR 和 .NET SignalR 区别的更多相关文章

  1. 在ASP.NET CORE 2.0使用SignalR技术

    一.前言 上次讲SignalR还是在<在ASP.NET Core下使用SignalR技术>文章中提到,ASP.NET Core 1.x.x 版本发布中并没有包含SignalR技术和开发计划 ...

  2. asp.net core 2.0集成signalr

    在博客园也很多年了,一直未曾分享过什么东西,也没有写过博客,但自己也是汲取着博客园的知识成长的: 这两天想着不能这么无私,最近.NET CORE貌似挺流行的,闲来无事也自己搞了个asp.net cor ...

  3. asp.net core实时库:SignalR(1)

    SignalR的基本概念 前言 最近在自己的项目中实践了SignalR的使用,asp.net core 2.1版本的时候建立了对SignalR的支持,SignalR的可使用Web Socket, Se ...

  4. ASP.NET Core的实时库: SignalR简介及使用

    大纲 本系列会分为2-3篇文章. 第一篇介绍了SignalR的预备知识和原理 本文介绍SignalR以及ASP.NET Core里使用SignalR. 本文的内容: 介绍SignalR 在ASP.NE ...

  5. ASP.NET Core的实时库: SignalR -- 预备知识

    大纲 本系列会分为2-3篇文章. 第一篇介绍SignalR的预备知识和原理 然后会介绍SignalR和如何在ASP.NET Core里使用SignalR. 本文的目录如下: 实时Web简述 Long ...

  6. ASP.NET Core 装X利器SignalR:电子画板

    电子画板开发需求 教师端需求: 教师登录后能创建房间(教室) 学生加入房间后有通知提醒 教师能够解散房间 基本的画板功能   学生端需求: 能够切换不同在线的房间 能够收到新建房间的通知 能够收到房间 ...

  7. ASP.NET CORE 2.0 Uses SignalR Technology

    https://www.codeproject.com/Articles/1208322/ASP-NET-CORE-Uses-SignalR-Technology

  8. 【ASP.NET Core MVC 入门须知】Net Core和Net Framework 的区别

     1.简单介绍 从上面图中我们可以看到.net  主要分为三个部分 .net FrameWork,.net Core ,Xamarin XAMARIN  主要用来构建APP的主要用的是C#语言 .NE ...

  9. 处理器核、Core、处理器、CPU区别&&指令集架构与微架构的区别&&32位与64位指令集架构说明

    1.处理器核.Core.处理器.CPU的区别 严格来说"处理器核"和" Core "是指处理器内部最核心的部分,是真正的处理器内核:而"处理器&quo ...

随机推荐

  1. Python机器学习基础教程-第2章-监督学习之决策树集成

    前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...

  2. Clean Code 代码检查清单

    注释: 不恰当的信息:注释只应该描述有关代码和设计的技术性信息. 废弃的注释:过时.无关或不正确的注释就是废弃的注释. 冗余注释:注释应该谈及代码自身没提到的东西 糟糕的注释:值得编写的注释,也值得好 ...

  3. eNSP——实现OSPF与ACL综合实验

    OSPF与ACL再前几个随笔中提到了,现在我们来做一个实例. 拓扑图: 实验案例要求: 1.企业内网运行OSPF路由协议,区域规划如图所示:2.财务和研发所在的区域不受其他区域链路不稳定性影响:3.R ...

  4. scrapy,Twisted,pywin32安装

    安装包链接   百度云下载    https://pan.baidu.com/s/1V191nOtEDInxd_fkyi5siQ&shfl=sharepset Linux pip3 insta ...

  5. ant安装(for linux)

      一. 下载 从http://ant.apache.org/bindownload.cgi可以下载最新的tar包:apache-ant-1.8.4-bin.tar.gz   二. 解压安装 将ant ...

  6. Ubuntu下U盘文件只读的解决办法

    转自linux公社:http://www.linuxidc.com/Linux/2012-12/76130.htm Ubuntu下U盘出现文件系统只读的问题了.症状为无法删除U盘中现有文件,无法向U盘 ...

  7. cnbolgs博客中添加Latex支持

    参考:http://www.cnblogs.com/ilogic/archive/2012/08/05/latex.html 主要是利用在线生成公式的工具:MathJax,但要在博客上获得 MathJ ...

  8. feign学习笔记

    使用:

  9. Servlet 表单及上传文件

    // 文件路径 D:\ApacheServer\web_java\HelloWorld\src\com\test\TestServletForm.java package com.test; impo ...

  10. Python入门学习——PyQt5程序基本结构

    在学习python GUI部分时,一开始看书有点懵,看不懂框架,以下是个人学习所得(参考了别人的视频讲解),错误之处,望大家指教 #0.导入需要的包和模块from PyQt5.Qt import * ...