由于要转 .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. 常见问题:MySQL/索引

    普通索引 最常用,没有任何限制. 唯一索引 必须唯一,但允许空值,如果是组合索引,列值的组合必须唯一. 组合索引 由于MySQL查询时,只能使用一个索引,因此建立组合索引在组合查询的场景下更加有效.组 ...

  2. php有关类和对象的相关知识2

    与类有关的魔术常量: __CLASS__,:获取其所在的类的类名. __METHOD__:获取其所在的方法的方法名. class A{ function f1(){ echo __CLASS__: / ...

  3. noVNC 安装、配置与使用

    最近项目中使用到了远程终端操控,从各方找到了noVNC这个神奇的家伙,废话不多说,开始介绍它的安装配置与使用. 1. 下载noNVC 好多渠道可以下载到noVNC,可以直接访问noVNC的官方网页ht ...

  4. SpringBoot集成ActiveMq消息队列实现即时和延迟处理

    原文链接:https://blog.csdn.net/My_harbor/article/details/81328727 一.安装ActiveMq 具体安装步骤:自己谷歌去 二.新建springbo ...

  5. (模板)hdoj2544(最短路--bellman-ford算法&&spfa算法)

    题目链接:https://vjudge.net/problem/HDU-2544 题意:给n个点,m条边,求点1到点n的最短路. 思路: 今天学了下bellman_ford,抄抄模板.dijkstra ...

  6. 02 HTML

    1. HTML概念: HTML是最基础的网页开发语言 * Hyper Text Markup Language 超文本标记语言 * 超文本: * 超文本是用超链接的方法,将各种不同空间的文字信息组织在 ...

  7. google test 打印派生类对象

    在Unison中使用google test时,发现EXPECT_EQ在fail时,不能打印Unison Test Language中定义的派生类的对象.于是写了个纯C++的示例,发现在只定义基类的op ...

  8. Markdown 语法 (转载)

    Markdown 语法整理大集合2017   1.标题 代码 注:# 后面保持空格 # h1 ## h2 ### h3 #### h4 ##### h5 ###### h6 ####### h7 // ...

  9. 从零开始学Flask框架-002

    Jinja2模板 默认情况下,Flask 在程序文件夹中的templates 子文件夹中寻找模板. Jinja2 中的extends 指令从Flask-Bootstrap 中导入bootstrap/b ...

  10. WUSTOJ 1318: 区间的连通性(Java)

    题目链接: