\

要点

\\

  • SignalR Core改用Microsoft.AspNetCore.Sockets,不再依赖HTTP。\\t
  • 使用MessagePack序列化格式,支持二进制协议。\\t
  • TypeScript客户端移除了第三方依赖包。\\t
  • 支持WebSocket原生客户端,可以使用自己构建的客户端连接到SignalR服务器。\\t
  • 伸缩方式更灵活,可以通过自己实现的方式进行横向扩展。\

\\

几个月前,SignalR Core团队发布了一个非官方版本的ASP.NET Core SignalR。为此,开发人员有机会了解其工作原理以及ASP.NET SignalR与Signal Core新架构之间的区别。

\\

SignalR Core中移除了哪些特性

\\

通过对比两个版本的SignalR可以发现,新版本不再支持一些重要的特性。首先是移除了对jQuery和其他第三方类库的依赖,因为新版本的JavaScript客户端是使用TypeScript开发的。其次是自动连接后的消息重放功能,移除该功能主要是出于性能方面的考虑。服务器需要为每一个连接维护一个缓冲区,用于保存消息,以便后续重新发送。当客户端断开连接,可以尝试重新恢复连接,然后将未发送的消息发送给客户端。可以想象,如果有很多客户端断开连接,而且每个客户端都发送大量的消息,对于服务器来说是个很大的负担。另一个被SignalR团队移除特性是多Hub端点,所以,在新版本里,每个连接只有一个Hub。

\\

新版本的SignalR Core不再支持横向扩展(Scale Out)模型,原因是MessageBus被当成了横向扩展的“万灵丹”,但它实际上只支持Azure Service Bus、Redis和SQL Server。在实际的协作场景当中(客户端到客户端),随着客户端和消息数量的增长,通过以上三种方式进行横向扩展会有瓶颈问题。

\\

不过,我认为,移除横向扩展功能这一决定有点太过激进,因为在某些场景下,MessageBus仍然十分有用。例如,在将SignalR作为一个广播服务器时,它可以控制发送消息的数量。而在SignalR Core的alpha版本中,开发者可以根据实际情况选择是否进行横向扩展,如业务需求、系统约束或基础设施,这种设计更加“可插拔”。SignalR Core团队提供了一个使用Redis进行横向扩展的示例。其他扩展方式可能会被包含在SignalR Core的最终版中。

\\

最后一个被移除的功能是多服务器间的双向复制(backplane),因为这个功能会在服务器场生成太多的流量。ASP.NET SignalR通过MessageBus在服务器间复制每一个消息,因为客户端无法直接连接到服务器场,而现在,SignalR使用粘性会话来避免在所有服务器间复制消息。这样一来,SignalR Core就可以知道哪个客户端连接到了哪台服务器上。

\\

SignalR Core中增加了哪些新特性

\\

现在让我们来看一下SignalR Core带来了哪些新的特性。首先是使用了二进制协议来发送和接收消息。在ASP.NET SignalR中只能使用JSON格式的文本来发送和接收消息,而现在则可以使用二进制协议,该二进制协议基于MessagePack序列化格式,比JSON更快、体积更小。

\\

主机无关性是另一个非常重要的特性,有了这个特性,就可以移除对HTTP的依赖。现在,我们可以在HTTP或TCP之上使用SignalR。端点API也是非常重要的一个特性,它是基础的构建块,用于支持主机无关性。因为新版本是基于Microsoft.AspNetCore.Sockets这一底层的网络抽象层,所以可以直接使用Socket。这么说来,SignalR Hub其实也就是一个端点。

\\

多格式也是一个很酷的特性,有了这个特性,我们可以处理任意格式的消息。我们可以使用多种不同的客户端连接到同一个端点,这些客户端可以使用不同的消息格式。也就是说,SignalR Core已经实现了消息的格式无关性。这个示例在同一个端点上使用了三种格式(JSON、PIPE和Protobuf)来读写消息,因为使用了自定义的处理器,可以无缝地处理各种格式的消息。正如之前提到的那样,可能是因为使用了Microsoft.AspNetCore.Sockets,从底层来看,消息都只是简单的二进制字节。

\\

新版本还支持WebSocket原生客户端,所以开发者也可以使用除SignalR Web客户端之外的其他客户端。之前,开发者必须使用基于JavaScript的Web客户端连接到SignalR服务器上。现在,开发者可以自己开发客户端,充分利用浏览器API提供的优势。当然,开发者也可以使用最新的TypeScript客户端,因为TypeScript提供了很多有用的特性。另外,客户端是通过NPM包管理器进行发布的,这样依赖管理也就变得更简单了。

\\

最后一点是,横向扩展变得更灵活,提供了更高的可扩展性。SignalR Core团队简化并改进了横向扩展模型,并提供了一个基于Redis的横向扩展示例,帮助开发者了解如何进行横向扩展。

\\

去年9月14号,SignalR Core团队发布了第一个alpha版,10月9号发布了第二个alpha版,也就是SignalR Core 2.0官方预览版。现在,我们即将探讨这一版本中包含的主要变化。

\\

在得知有新版本后,我在第一时间去拉取代码,并试着去构建最新的代码。不过,正如预期的那样,因为代码还在开发当中,无法立马构建成功。尽管如此,我们还是能够在第一时间看到正在发生的变更,这有助于我们了解为什么要做出这些变更。接下来,我将列出我在构建过程中遇到的问题,并告诉大家我做了哪些事情来修复这些问题。

\\

\\t\t\t

要在项目中使用SignalR Core,必须引用Microsoft.AspNetCore.SignalR,最新版本是1.0.0-alpha2-final。

\\t\t\t

HubConnectionBuilder

\\

在之前的版本中,如果要在服务器端连接到一个Hub,我们会使用HubConnection类,比如:

\\

\var connection = new HubConnection(new Uri(baseUrl), loggerFactory);

\\

而现在,我们需要使用HubConnectionBuilder类(实现了Builder设计模式)来连接SignalR Core Hub,这也是第一个导致代码构建失败的变化。这一变化让建立连接变得更具可扩展性,不需要使用满是参数或带有null参数的构造函数。我很喜欢这个变化,因为它简化了建立连接的过程。

\\

\var connection = new HubConnectionBuilder()\                        .WithUrl(baseUrl)\                        .WithConsoleLogger()\                        .Build();

\\

在服务器端处理连接

\\

在之前的版本中,客户端在“On”方法中处理由SignalR Hub广播过来的数据,这个时候需要处理一大堆参数:

\\

\connection.On(\"UpdateCatalog\

SignalR Core尝鲜相关推荐

  1. 基于 Blazui 的 Blazor 后台管理模板 BlazAdmin 正式尝鲜

    简介 BlazAdmin 是一个基于Blazui的后台管理模板,无JS,无TS,非 Silverlight,非 WebForm,一个标签即可使用. 我将在下一篇文章讨论 Blazor 服务器端渲染与客 ...

  2. Linux下尝鲜IDE Rider .NET又一开发利器

    RiderRS 扯淡:很多人说:jetbrains出品,必属精品,jetbrains确实出了不少好东西,但是他的产品总感觉越用越慢,我的小Y430P高配版也倍感压力,内存占用率高. Multiple ...

  3. PHP 8.0 源码编译安装 JIT 尝鲜

    女主宣言 今天小编为大家分享一篇最简化的 PHP 8 源码编译安装方法.PHP 8.0 Alpha 1 已经在2020年6月25号发布了,今天带领大家快速尝鲜 PHP 8.0 的新特性 JIT.希望能 ...

  4. 谷歌发布Edge TPU芯片,云上模型本地运行丨附尝鲜地址

    郭一璞 发自 凹非寺  量子位 报道 | 公众号 QbitAI 昨晚,谷歌博客推送了他们的物联网软硬件新设备--Edge TPU硬件芯片,还有Cloud IoT Edge,将谷歌云AI功能扩展到网关和 ...

  5. Windows Server 2008 R2正式版尝鲜体验

    Windows Server 2008 R2尝鲜体验 Windows Server 2008 R2已经发布了RTM版本,现在英文版的R2已经可以通过Technet或MSDN订阅下载.Windows S ...

  6. 华为联合全球伙伴加速上线HMS内容类应用,影音娱乐体验一步尝鲜

    2020年3月26日,华为宣布推出年度影像旗舰P40系列,诠释科技与美学融合的新典范.P40家族不仅包含P40和P40 Pro,还有新成员P40 Pro+,让美好的相遇接二连三. 华为消费者业务CEO ...

  7. arm云教室服务器_便宜又好用!云上ARM尝鲜体验

    混合云小白 网易云解决方案架构师,在云产品和云解决方案的道路上继续爬坑. 名为"ARM架构CPU"的新变革 说起ARM(Advanced RISC Machine)架构的CPU,从 ...

  8. 通用流量录制回放工具 jvm-sandbox-repeater 尝鲜 (二)——repeater-console 使用

    本文作者陈恒捷是TesterHome社区主编,第十届MTSC大会上海站-开源专场出品人.先后在PP助手.PPmoney.荔枝等公司从事测试效能提升相关工作,在测试技术及效率提升方面有丰富的经验积累. ...

  9. Ubuntu Multipass 尝鲜

    Multipass 是 Ubuntu 推出的一个跨平台的虚拟机管理工具,支持:Windows, macOS 和 Linux 操作系统. 官方网站: Multipass orchestrates vir ...

最新文章

  1. python 累积正态分布函数_为什么机器学习都围绕正态分布进行讨论?
  2. 如何在国内上medium_在Medium上写作的风格指南
  3. 现代 JavaScript 函数库 usuallyjs 的安装和使用
  4. 流水账之都市:我是一个客居者
  5. VC维的来龙去脉(转)
  6. 有序链表插入 java_Java 实现有序链表
  7. webpack使用文档
  8. 【英语学习】【WOTD】decoct 释义/词源/示例
  9. LeetCode 49 Group Anagrams(字符串分组)
  10. MongoDB之Shard初步认识
  11. Win11字体显示不全怎么解决?
  12. JSON.stringify用法
  13. 【数据结构排序算法(五)】二路归并排序
  14. Jenkins | 搭建你第一个Jenkins应用
  15. 北京市公布533家接种点名单 (zz)
  16. [OpenGL] L系统 分形树的实现(L-System植物建模)
  17. tcl怎么实现从服务器拷贝文件夹,如何在TCL中二进制读取文件并通过XMLRPC将其发送到用Python编写的服务器?...
  18. cdh 6哈希验证失败解决方法
  19. android开源轮播图框架,最好用的轮播插件框架都在这里了,Github流行轮播框架...
  20. 2012 5.4青年节--上海出差

热门文章

  1. 教你如何玩转redis-简单消息队列
  2. python基础语法3_python基础语法三
  3. Java学习笔记33
  4. Java学习笔记20
  5. INI文件快速解析java工具包
  6. Swift Package Manager 库制作
  7. UIControlEvents的几种类型值
  8. 大连理工大学计算机原理实验交通灯,大连理工大学计算机原理第四次实验.docx...
  9. oracle索引大小暴增_oracle 如何预估将要创建的索引的大小
  10. The CLR’s Execution Model(Chapter 1 of CLR via C#)