如何在 ASP.Net Core 中使用 SignalR

SignalR for ASP.Net Core 是 SignalR 的浴火重生版,允许你在 ASP.Net Core 中实现实时通讯,这里的 实时 意味着双方都能快速的感知对方发来的消息,比如:一旦 server 端有需要推送的内容将会直接 push 到 client,这和原始的 http 单向请求有着本质的区别。

值得注意的是, ASP.Net Core 版的 SingalR 移除了老版的诸多功能,比如:

  • 自动重连机制

  • 消息处理机制

  • 单连接多hub

不过无需担心,新版的 SingalR 在健壮性和易用性上做了非常大的改进,总的来说,新版本已不兼容老版本,而且新的 SingalR 客户端采用的是 TypeScript 。

安装 SingalR

要想使用 SingalR,需要通过 nuget 引用 Microsoft.AspNetCore.SignalR 包,可以通过 Visual Studio 2019 的 NuGet package manager 可视化界面安装 或者 通过 NuGet package manager 命令行工具输入以下命令:


Install-Package Microsoft.AspNetCore.SignalR

使用 SignalR broadcast

现在我们一起实现一下如何在 ASP.Net Core 应用程序中使用 SignalR 的广播消息,那怎么做呢?创建一个自定义的 MessageHub 类并继承类库中的 Hub 基类,在 MessageHub 中定义一个 SendMessage 方法,该方法用于向所有已连接的客户端发送消息,如下代码所示:

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

配置 SignalR

要想在 ASP.Net Core 中使用 SignalR,只需在 Startup.ConfigureServices() 中调用扩展方法 AddSignalR() 将其注入到 ServiceCollection 中即可,如下代码所示:

public class Startup{public Startup(IConfiguration configuration){Configuration = configuration;}public IConfiguration Configuration { get; }// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){services.AddSignalR();services.AddControllersWithViews();}}

为了能够启用 MessageHub,需要在 Startup.Configure 方法中添加如下代码:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env){app.UseEndpoints(endpoints =>{endpoints.MapControllerRoute(name: "default",pattern: "{controller=Home}/{action=Index}/{id?}");endpoints.MapHub<MessageHub>("/messagehub");});}

创建 SignalR client

SignalR 的 client 是任意的,意味着它可以是 html, windowform, wpf,console 甚至是 java 程序,它们都可以消费 server 端发来的消息,接下来准备创建一个 Console 程序尝试一下,那如何做呢?需要在 client 端引用 Microsoft.AspNetCore.SignalR.ClientSystem.Text.Encodings.Web 两个nuget包,如下代码所示:

class Program{static async Task Main(string[] args){HubConnection connection = new HubConnectionBuilder().WithUrl("http://localhost:55215/messagehub").Build();connection.On<string, string>("ReceiveMessage", (user, message) =>{var newMessage = $"{user}: {message}";Console.WriteLine(newMessage);});await connection.StartAsync();await connection.InvokeAsync("SendMessage", "jack", "hello,world");Console.ReadLine();}}

接下来就可以调试一下,分别启动 server 和 client 端,如下图所示:

server

client

译文链接:https://www.infoworld.com/article/3267165/how-to-use-signalr-in-aspnet-core.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搞笑动图:这些痛,只有程序员懂…

“代码上线后又追加了新特性” “在生产环境做 hotfix” “刚调稳定的系统&#xff0c;公司叕空降了一位架构师&#xff0c;叕要重构现有系统…… ” “当程序员听客户说还在用 IE 时” “当黑客拿到 root 权限之后” “代码进入循环分支后” “项目交接&#xff0c;客户要求开…

python中闭包不是立刻执行_一道神奇的Python面试题,你会吗?

无意间&#xff0c;看到这么一道Python面试题&#xff1a;以下代码将输出什么&#xff1f;def testFun():temp [lambda x : i*x for i in range(4)]return tempfor everyLambda in testFun():print (everyLambda(2))脑中默默一想&#xff0c;这还用说么&#xff0c;肯定是&…

.net 中通用的formatstring格式符整理

格式化日期和数字的字符串经常要用到这个, 就把帮助里面的东西大概整理了一些列在这里了. 下表描述了用来格式化 DateTime 对象的标准格式说明符。 格式说明符名称说明d短日期模式显示由与当前线程关联的 DateTimeFormatInfo.ShortDatePattern 属性定义的模式或者由指定格式提供…

linux内核分为子系统,Linux内核内存管理子系统分析【转】

还是那张熟悉的老图&#xff1a;Linux内核子系统简介(由七个部分组成)Linux内存管理模型&#xff1a;1. 内存管子系统职能&#xff1a;1> 管理虚拟地址与物理地址的映射2> 管理物理内存的分配2. 地址映射管理1> 虚拟地址空间分布&#xff1a;linux采用的是一种虚拟地…

python打包成安装包_把 python 程序打包成 egg 或者 whl 安装包

1.1 安装setuptools 首先要安装setuptools工具。Debian/Ubuntu下可以直接使用apt安装&#xff1a; $ sudo apt-get install python-setuptools 或者通过pip安装&#xff1a; $ pip install setuptools 更新setuptools&#xff1a; $ pip install --upgrade setuptools 或者下载…

关于C#事件处理函数中的参数(object sender, EventArgs e)

1、是事件源&#xff0c;表示触发事件的那个组件 如(button/label/listview...)&#xff0c;比如说你单击button&#xff0c;那么sender就是button2、EventArgs是事件参数&#xff0c;它用来辅助你处理事件比如说你用鼠标点击窗体&#xff0c;那么EventArgs是会包含点击的位置…

spss22.0统计分析从入门到精通_数据分析最全资料:SPSS/MATLAB/SQL/SAS/EXCEL经典教材+视频教程,快速入门!...

可以说当今社会数据就是力量。数据分析能力已经成为各个行业必备的技能&#xff0c;如果能熟练掌握数据分析技能&#xff0c;不管是留学申请还是以后的就业&#xff0c;都会是一个很大的加分项。但是目前国内很少有高校专门开设数据分析课程&#xff0c;想要掌握技能大部分要靠…

可反复擦写5万次的手写板,竟然还能用橡皮擦能清除屏幕!

作为一名文艺青年&#xff0c;平时写字画画是我的一大爱好。 心情不错&#xff0c;来个创作&#xff01; 还记得我们之前介绍过的Boogie Board电子手写板吗&#xff1f; 小木用的就是它。 虽然好用&#xff0c;只不过有时候不小心画错了&#xff0c;只能重新来。 伤心啊…… 不…

普通用户杜绝不请自来的邮件对策

1、给自己的信箱起个“复杂用户名”:许多人习惯用自己姓名的拼音作为用户名&#xff0c;但一般过于简单&#xff0c;这样被垃圾邮件制造者捕捉到的机率很高。因此在申请邮箱时&#xff0c;不妨起个保护性强一点的用户名&#xff0c;比如英文和数字的组合&#xff0c;尽量长一点…

[Abp 源码分析]权限验证

点击上方蓝字关注我们0.简介Abp 本身集成了一套权限验证体系&#xff0c;通过 ASP.NET Core 的过滤器与 Castle 的拦截器进行拦截请求&#xff0c;并进行权限验证。在 Abp 框架内部&#xff0c;权限分为两块&#xff0c;一个是功能(Feature)&#xff0c;一个是权限项(Permissio…

cocoscreator editbox 只允许数字_《Cocos Creator游戏实战》做一个数字调节框

当玩家购买道具的时候&#xff0c;一个个买可能会比较麻烦&#xff0c;用数字调节框的话玩家一次性就可以买好几十个了(钱够的话)。运行效果如下&#xff1a;Cocos Creator版本&#xff1a;2.2.0公号"All Codes"后台回复"数字调节框"&#xff0c;获取该项目…

linux自动应答,08. 创建 ks.cfg自动应答文件

Kiskstart 安装步骤比较 Cobbler 自动化部署复杂些&#xff0c;众所周知&#xff0c;随着时间推移&#xff0c;行业会逐步的降低软件操作难度以作为软件提升的标志&#xff0c;于是 Cobbler 产生掩盖或者帮操作者完成了许多工作&#xff0c;于是使用就更简单。但是使用 Kisksta…

python类变量共享吗_第7.12节 可共享的Python类变量

第7.12节 可共享的Python类变量一、 引言在上节已经引入介绍了类变量和实例变量&#xff0c;类体中定义的变量为类变量&#xff0c;默认属于类本身&#xff0c;实例变量是实例方法中定义的self对象的变量&#xff0c;对于每个实例都是独有数据&#xff0c;而类变量是该类所有…

为什么一流成功人士的闹钟都定在早晨5:57?

对很多人来说&#xff0c;早晨时分是一天中最匆忙的时段。近年来&#xff0c;我在研究人们如何利用时间的过程中发现&#xff0c;市场上铺天盖地的媒体教你如何利用早晨的时间。 美国国家睡眠基金会发布的一项睡眠调查结果显示&#xff0c;在工作日的早晨&#xff0c;30-50岁的…

命令行小技巧

我们平时使用Linux的时候经常遇到这样一个问题&#xff0c;举例有这样一种情况&#xff1a;执行命令 $ cp /etc/apt/sources.list /etc/apt/sources.list.bak 这里面有个问题&#xff0c;明明 /etc/apt/sources 这几个字都是一样的&#xff0c;为什么要打两遍&#xff1f;这样的…

统计学习导论_统计机器学习之扫盲导论篇

机器学习之扫盲导论篇来都来了&#xff0c;不关注一下吗&#xff1f;&#xff1f;人工智能是当下最火的词&#xff0c;而机器学习就是它的灵魂。现在超级多搞金融的人已经用到很深的机器学习模型了&#xff0c;更别提互联网企业的大佬们了&#xff0c;比如&#xff1a;(这是一篇…

linux环境下创建postgis数据库,linux下搭建postgresql、postgis、pg_pathman环境步骤详解...

操作系统&#xff1a;centOS6.6安装postgreSQL9.6.2安装命令&#xff1a;./postgresql-9.6.3-2-linux-x64.run之后按照图形界面操作安装&#xff0c;语言选择zh_CN UTF-8安装geos-3.6.0(会报错&#xff0c;暂时不用管)安装命令&#xff1a;tar xjvfgeos-3.6.0.tar.bz2cd geos-3…

[Abp 源码分析]异常处理

点击上方蓝字关注我们Abp 框架本身针对内部抛出异常进行了统一拦截&#xff0c;并且针对不同的异常也会采取不同的处理策略。在 Abp 当中主要提供了以下几种异常类型&#xff1a;异常类型描述AbpExceptionAbp 框架定义的基本异常类型&#xff0c;Abp 所有内部定义的异常类型都继…

phpstorm设置 打开文件所在目录_PDF文件在线分享并设置打开次数

公司有一些重要的PDF文档&#xff0c;怎么才能防止外泄&#xff1f;如何加密PDF文件防止被人复制了&#xff1f;怎样让PDF不能被别人拷贝啊&#xff1f; 这些问题困扰了一部分想让别人看pdf内容又担心别人泄露的人。本文用maipdf网站的例子来进行设置。首先我们打开maipdf的网站…

荐号 | 11个人工智能与大数据相关的个人、企业优质号

AlphaGo Zero都会自学了&#xff0c;作为刚刚步入AI大门的我们&#xff0c;应该如何选择合适自己的知识平台呢&#xff1f;今天小编为你甄选了几个高质量的技术公众号。 这些号更多的不是讲授枯燥的理论&#xff0c;而是从行业资讯、一线技术、应用案例、职场发展等多个角度分享…