如何在.NET中集成SignalR

SignalR 简介

SignalR是一个开放源代码库,可用于简化向应用添加实时Web功能,实时Web功能使服务器端代码能够将内容推送到客户端。

SignalR开源库:https://github.com/SignalR/SignalR

SignalR 应用场景

需要高频次从服务器获取信息的应用:如预警、游戏、社交网络、投票、拍卖、地图和GPS引用;

仪表盘应用:如数字大屏、仪表板、即时信息看板等;

协作应用:包括白板应用和团队会议软件;

通知应用:社交网络、电子邮件、聊天、游戏、预警和其他应用都需要使用的通知。

.NET Framework项目中集成SignalR

服务端(.NET Framework MVC)

选择要引用Signalr的项目,右键点击【管理NuGet程序包】搜索【SignalR】包,找到“ Microsoft.AspNet.SignalR ”,点击【安装】

因为SignalR需要依赖其他程序包,在安装“ Microsoft.AspNet.SignalR ”的同时,还会自动安装“ Microsoft.AspNet.SignalR.Core ”、“ Microsoft.AspNet.SignalR.JS ”、“ Microsoft.AspNet.SignalR.SystemWeb ”。

还需引用添加Owin相关的包,Owin定义了 Web 服务器和应用程序组件之间的交互的规范。

同样,在【管理NuGet程序包】搜索【Owin】包,找到“ Microsoft.Owin ”,点击【安装】

在项目中引入

Microsoft.Owin.Hosting
Microsoft.Owin.Cors
Microsoft.Owin.Host.HttpListener


在Web项目中【Startup.cs】文件中启用SignalR。


   

 public class Startup{public void Configuration(IAppBuilder app){app.MapSignalR();}}


创建一个类来继承Hub类

    public class ServerHub : Hub{       public async Task DoWork(){//供客户端调用}public async Task SendMessage(string msg){// 当前连接用户的标志,是一个GUID,如:362d3597-041e-4d65-8fdf-e77e98425d38string connectionId = Context.ConnectionId;// 给所有人发送消息await Clients.All(connectionId).newmsg(msg);// 给组内所有人发送消息await Clients.Group(connectionId).newmsg(msg);// 给除去自己其他人发送消息await Clients.Others(connectionId).newmsg(msg);// 给自己发送消息await Clients.Caller(connectionId).newmsg(msg);}public async Task WhoIam(string connectionId){// 当前连接用户的标志,是一个GUID,如:362d3597-041e-4d65-8fdf-e77e98425d38await Groups.Add(Context.ConnectionId, connectionId);await Clients.Group(connectionId).newmsg(Context.ConnectionId + "已登入");}}


BuildHub中的方法供客户端调用,方法中Clients代表客户端对象。

把后台服务启动起来,然后查看SignalR状态是否正常,如果出现如图页面则表示SignalR正常。

客户端:

在网页中引入SignalR相关JS

  <script src="/Scripts/jquery.min.js"></script><script src="/Scripts/jquery.signalR-2.4.1.min.js"></script><script src="/signalr/hubs"></script>


客户端页面代码:

<html>
<head><title>SignalR</title>
</head>
<body><div> <input type="text" id="msg"/><button id="sendMsg">发送消息</button></div><ol id="showMsg"></ol>  <script src="/Scripts/jquery.min.js"></script><script src="/Scripts/jquery.signalR-2.4.1.min.js"></script><script src="/signalr/hubs"></script><script>$(function () {//获取服务端连接对象var hub = $.connection.serverHub;//创建服务端所调用的客户端方法hub.client.showMsg=function(name, msg){$('#showMsg').append('<li><span style="color:red">'+name+':</span>'+msg+'</li>')}//开始连接服务器$.connection.hub.start().done(function () {//连接成功$('#sendMsg').bind('click', function () {//调用服务端发送方法hub.server.SendMessage($('#msg').val());})}).fail(function () {//连接失败alert("连接失败");});})
</script>
</body>
</html>

.NET Core 中集成 SignalR

先通过【管理 NuGet 程序包】搜索、安装 SignalR 包,主要是配置上有点差异。

若项目是.NET6 以前的版本,在【Startup.cs】中配置:

    public class Startup{public void ConfigureServices(IServiceCollection services){services.AddControllers();services.AddSignalR();}public void Configure(IApplicationBuilder app, IWebHostEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseRouting();app.UseAuthorization();app.UseEndpoints(endpoints =>{endpoints.MapControllers();endpoints.MapHub("Hubs"); });}}


若项目是.NET6 以后的版本,则在【Program.cs】中配置:

var builder = WebApplication.CreateBuilder(args);
//添加 SignalR 服务
builder.Services.AddSignalR();
app.UseEndpoints(endpoints =>
{endpoints.MapControllerRoute(name: "default",pattern: "{controller=Home}/{action=Index}/{id?}");//添加 SignalR 端点endpoints.MapHub("/Hubs");
});

来源: 如何在.NET中集成SignalR-武穆逸仙

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

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

相关文章

java-spring 14 项目启动过程

Spring的启动流程可以归纳为三个步骤&#xff1a; 1、初始化Spring容器&#xff0c;注册内置的BeanPostProcessor的BeanDefinition到容器中 2、将配置类的BeanDefinition注册到容器中 3、调用refresh()方法刷新容器 // 初始化容器 public AnnotationConfigApplicationContex…

弘君资本股市技巧:限售股解禁对市场有何影响?

限售股解禁意味着本来不能在商场上自由生意的股票能够进入二级商场流通了&#xff0c;限售股解禁往往会引起投资者们的高度关注。关于限售股解禁对商场有何影响&#xff0c;弘君资本下面就为大家具体介绍一下。 限售股解禁的影响&#xff1a; 1、股价跌落压力增大。当限售股解…

二.常见算法--贪心算法

&#xff08;1&#xff09;单源点最短路径问题 问题描述&#xff1a; 给定一个图&#xff0c;任取其中一个节点为固定的起点&#xff0c;求从起点到任意节点的最短路径距离。 例如&#xff1a; 思路与关键点&#xff1a; 以下代码中涉及到宏INT_MAX,存在于<limits.h>中…

彩色进度条(C语言版本)

.h文件 #include<stdio.h> #include<windows.h>#define NUM 101 #define LOAD_UP 50 #define LOAD_DOWN 60 #define SLEEP_SLOW 300 #define SLEEP_FAST 70 版本1&#xff1a;&#xff08;初始版&#xff09; //v1 #include "progress.h" int main() …

【云原生】Kubernetes基础命令合集

目录 引言 一、命令概述 &#xff08;一&#xff09;命令分类 &#xff08;二&#xff09;基本语法 二、查看基本信息 &#xff08;一&#xff09;环境指令 1.查看版本信息 2.查看资源对象简写 3.添加补全信息 4.查看日志 5.查看集群信息 &#xff08;二&#xff0…

vue打包部署到springboot,通过tomcat运行

tomcat默认端口 8080springboot端口 9132vue 端口 9131 框架 项目是基于SpringBootVue前后端分离的仓库管理系统 后端&#xff1a;SpringBoot MybatisPlus前端&#xff1a;Node.js Vue element-ui数据库&#xff1a;mysql 一. 打包Vue项目 cmd中输入命令 npm run build 后…

【施磊】C++语言基础提高:深入学习C++语言先要练好的内功

课程总目录 文章目录 一、进程的虚拟地址空间内存划分和布局二、函数的调用堆栈详细过程三、程序编译链接原理1. 编译过程2. 链接过程 一、进程的虚拟地址空间内存划分和布局 任何的编程语言 → \to → 产生两种东西&#xff1a;指令和数据 编译链接完成之后会产生一个可执行…

python将程序运行结果存入txt文本

//其实就是运行下面代码&#xff0c;然后下面代码会通过subprocess再去运行script.py&#xff08;我们的程序代码&#xff09;&#xff0c;然后把它写入oput.txt中。 import subprocess with open(oput.txt, w) as f:subprocess.run([python, script.py], stdoutf, stderrsu…

XX数字中台技术栈及能力

XX数字中台技术栈及能力 1 概述 XX数字中台面向数据开发者、数据管理者和数据应用者&#xff0c;提供数据汇聚、融合、治理、开发、挖掘、共享、可视化、智能化等能力&#xff0c;实现数据端到端的全生命周期管理&#xff0c;以共筑数字基础底座&#xff0c;共享数据服务能力…

酷开系统 | 酷开科技把握智慧先机 AI赋能家庭场景

智慧化是当今世界科技发展的前沿领域之一。现在的智慧化&#xff0c;也正在逐步成为我们日常生活的一部分。电视系统也进入了数字化时代&#xff0c;AI的应用正在不断扩展&#xff0c;其潜力似乎无穷无尽。 酷开科技深耕人工智能技术&#xff0c;在提升语音体验、强化智能家居…

目前流行的前端框架有哪些?

目前流行的前端框架有很多&#xff0c;它们可以帮助开发者快速构建高质量的前端应用程序。本文将介绍一些目前比较受欢迎的前端框架&#xff0c;并分析它们的优缺点。 React React 是一个由 Facebook 开发的开源前端JavaScript库&#xff0c;用于构建用户界面&#xff0c;尤其…

在vue中实现下载文件功能

实际操作为&#xff0c;在表格中 我们可以获取到文件的id&#xff0c;通过插槽就可以实现 <template #default"scope"><el-button type"text" click"handleDown(scope.row)"><span>下载</span></el-button> </…

计算机毕业设计 | springboot+vue汽车修理管理系统 汽修厂系统(附源码)

1&#xff0c;项目背景 在如今这个信息时代&#xff0c;“汽车维修管理系统” 这种维修方式已经为越来越多的人所接受。在这种背景之下&#xff0c;一个安全稳定并且强大的网络预约平台不可或缺&#xff0c;在这种成熟的市场需求的推动下&#xff0c;在先进的信息技术的支持下…

网络协议——Modbus-TCP

目录 1、简介 2、Modbus-TCP与Modbus-RTU的区别 3、消息格式 4、功能码01H 5、功能码02H 6、功能码03H 7、功能码04H 8、功能码05H 9、功能码06H 10、功能码0FH 11、功能码10H 1、简介 Modbus-TCP&#xff08;Modbus Transmission Control Protocol&#xff09;是一…

嵌入式学习——3——TCP-UDP 数据交互,握手,挥手

1、更新源 cd /etc/apt/ sudo cp sources.list sources.list.save 将原镜像备份 sudo vim sources.list 将原镜像修改成阿里源/清华源&#xff0c;如所述 阿里源 deb http://mirrors.aliyun.com/ubuntu/ bionic main …

【qt】QListWidget 组件

QListWidget 组件 一.QListWidget的用途二.界面设计三.QListWidget的添加1.界面添加2.代码添加 四.列表项的设置1.文本2.图标3.复选框4.列表大小 五.字体和图标的设置1.字体&#xff1a;2.图标&#xff1a; 六.设置显示模式1.图标2.列表 七.其他功能实现1.删除2.全选3.反选4.ad…

小微企业管理系统如何选择等保服务?

小微企业在选择等保&#xff08;信息安全等级保护&#xff09;服务时&#xff0c;应当考虑以下几个关键点以确保既能符合法规要求&#xff0c;又能在成本效益上做出合理决策&#xff1a; 了解等保需求&#xff1a;首先&#xff0c;小微企业需要了解自身的业务性质和信息系统的重…

30.包名的修改和新建后端模块

权限和第三方登录确实令人头疼,我们来学一点简单一点的。 另外,如果各位有属于自己的域名和ICP/IP备案,布置一个作业,自行实现第三方QQ登录。 我们所说的包名修改,是一次性修改ruoyi的全部包名,因为发现很多人有这样的需求,下载别人的代码,想要改成自己公司的包名,结…

深入Django项目实战与最佳实践

title: 深入Django项目实战与最佳实践 date: 2024/5/19 21:41:38 updated: 2024/5/19 21:41:38 categories: 后端开发 tags: Django 基础项目实战最佳实践数据库配置静态文件部署高级特性 第一章&#xff1a;Django项目架构与设计原则 Django框架概述 Django是一个高级的P…

上位机图像处理和嵌入式模块部署(mcu的按键输入)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 做技术的同学&#xff0c;大部分都会把精力放在技术本身&#xff0c;却忽视了学的东西有什么实际的用途。就拿gpio来说&#xff0c;一般我们点灯也…