【SignalR全套系列】之在.Net6中实SignalR通信

微信公众号:趣编程ACE
关注可了解更多的.NET日常实战开发技巧,如需源码 请公众号后台留言 源码
[如果觉得本公众号对您有帮助,欢迎关注]

前文回顾

【SignalR全套系列】之在.NetCore中实现WebSocket双工通信

【SignalR全套系列】之在.Net Core 中实现Server-Send Events消息推送

【SignalR全套系列】之在.Net Core 中实现长轮询

SignalR 的基本使用

简介

1.SignalR是一个微软开源的库,作用于客户端与服务端之间的相互通信。
2.前文简述的WebSocket、SSE、长轮询等三种方式,SignalR都支持,此外还能自动选择最佳的通信方式。
3.至于用途,主要是用在实时性要求较高的场景,比如:聊天、看板、发布公告等

服务端实现

新建.net6项目

7e9ce9e3f74b0683a7e90418e1042f2b.png

1.注入SignalR所需服务
1// 注入SignalR所需服务
2builder.Services.AddSignalR();
2.注入SignalR所需服务
1// 开启静态文件  将客户端代码写入wwwroot中  防止跨域
2app.UseStaticFiles();
3.开启SignalR的路由节点
1// 开启路由节点 用来映射Signalr请求路径  
2// /custom 为自定义路径  
3// CustomHub 为Hub 类型
4app.MapHub<CustomHub>("/custom");
5// 同时支持分组请求,下篇讲解,,,,
3.自定义一个Hub类型 继承Hub
1// CustomHub:Hub 继承 Hub
2public class CustomHub:Hub<ClientData>{}
4.重写Hub 中 连接和关闭连接方法
1        /// <summary>2        /// 重写链接钩子3        /// </summary>4        /// <returns></returns>5        public override Task OnConnectedAsync()6        {7            return base.OnConnectedAsync();8        }9
10        public override Task OnDisconnectedAsync(Exception? exception)
11        {
12            return base.OnDisconnectedAsync(exception);
13        }
5.构造函数中引入日志中间件
1// 引入日志 方便控制台输出
2private readonly ILogger<CustomHub> _logger;
3
4public CustomHub(ILogger<CustomHub> logger)
5{
6   this._logger = logger;
7}
6.编写与客户端通信方法
1        /// <summary>2        /// 建立通信3        /// </summary>4        /// <param name="data"></param>5        public void BeginSendData(TransData data)6        {7            _logger.LogInformation("接受数据{0},{1}",data.id,data.message);8        }9
10        /// <summary>
11        /// 单一客户端调用 通信
12        /// 仅仅通知 调用的那个客户端 其余建立链接的客户端不生成通信
13        /// </summary>
14        /// <returns></returns>
15        public Task SingleClientCaller()
16        {
17            _logger.LogInformation("单独客户端调用");
18            return Clients.Caller.ClientHook(new (111,"111 客户端调用"));
19        }
20
21        /// <summary>
22        /// 所有客户端建立通信
23        /// 可通知所有的客户端
24        /// </summary>
25        /// <returns></returns>
26        public Task AllClientResponse()
27        {
28            _logger.LogInformation("通知所有的客户端");
29
30            return Clients.All.ClientHook(new(Guid.NewGuid(),"通知所有的客户端"));
31        }
32
33        /// <summary>
34        /// 指定调用  
35        /// </summary>
36        /// <returns></returns>
37        [HubMethodName("invoke")]
38        public TransData IvoData()
39        {
40            return new TransData(666,"返回invoke data");
41        }

客户端实现

1.引用js库

41b75fcfd5fc7f659a62a6541b8a6392.png

2.编写调用脚本
1// 初始化 路由:/custom 被路由节点捕获
2let connection = new signalR.HubConnectionBuilder()
3        .withUrl("/custom")
4        .build();
1// 开始连接 调用后台 BeginSendData 方法 成功后双方交互数据
2        connection.start().then(() => {
3        console.log("开始链接")
4        let id = parseInt(Math.random()*100);
5        connection.send('BeginSendData', {id: id, message: "链接成功了"})
6    });
1    // 调用 SingleClientCaller 这个方法2    const selfCall = () => connection.send('SingleClientCaller')34    // 调用AllClientResponse这个方法5    const all = () => connection.send('AllClientResponse')67    // 触发后台控制器8    const triggerFetch = () => fetch('/SendData')9
10    // call signalR hub function from client
11    const withReturn = () => connection.invoke('invoke')
12        .then(data => console.log('ivo data', data))
1 // 后台默认触发
2    connection.on("ClientHook", data => console.log('客户端触发成功', data));
3
4    // 后台指定方法触发之后
5    connection.on("client_recive", data => console.log('后台触发成功', data));

以上便是SignalR实现客户端与服务端通信的基本方法,下篇文章将演示分组通信

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

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

相关文章

实践1-qq邮箱主页

纯html的网页 采用table分割板块进行布局<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <head>…

解决adb调试显示 Connected Device ************** [null]

或者有时候直接提示[UNAUTHORIZED……] 上边的提示 Connected Device 中设备编号 后边加了个[null]&#xff0c;意思是未授权&#xff0c;看下设备是否提示授权&#xff0c;如果没看到提示&#xff0c;可以重新拔掉设备&#xff0c;重新连接接数据线&#xff0c;会弹出一个授权…

Java 解析XML的几种方法

XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。 XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已。 基本的解析方式有两种,一种叫SAX&#xff0c;另一种叫DOM。 SAX是基于事件流的解析,DOM是…

【前端就业课 第二阶段】CSS 零基础到实战(03)前端 CSS 动效 transition transform

本系列文章持续更新&#xff0c;点击专栏就可以看其他文章&#xff1a;点击进入专栏 整个前端学习路线 以下路线为 CSDN C认提供&#xff1a; 如果想 快点搞完 并且 就业 可以选择超级实习生计划 如果有技术想稳定点找工作&#xff0c;可以C认证&#xff0c;C认证还可以 内…

C#基于.Net-HtmlAgilityPack库的爬虫初体验

讲故事前几天有点空闲时间&#xff0c;在github上看一些.Net的开源库&#xff0c;看到了关于爬虫相关的库&#xff0c;于是加入了一个QQ群&#xff0c;看到里面各位大佬讨论的是爬的越好&#xff0c;进去越快&#xff0c;于是我自己也想做一个爬虫相关的东西&#xff0c;但是爬…

Android中文图混排时文图的居中对齐 FontMetrics以及自定义ImageSpan实现

文章转自&#xff1a;http://www.sohu.com/a/150059234_611601 本文作者CnPeng的博客地址&#xff1a; http://www.jianshu.com/p/2650357f7547 这个标题有点长&#xff0c;乍一看这么个标题你可能没明白啥意思&#xff0c;且听我慢慢道来。 公司的项目中新增了一个“心动”…

关于事件监听机制的总结(Listener和Adapter)

记得以前看过事件监听机制背后也是有一种设计模式的.(设计模式的名字记不清了,只记得背后实现的数据结构是数组.) 附上事件监听机制的分析图: 一个事件源可以承载多个事件(只要这个事件源支持这个事件就可以,男人就不支持生孩子的事件) 事件和监听器有对应关系的. 下面用awt中…

一、首页、详情页、文章编辑页制作《iVX低代码/无代码个人博客制作》

注&#xff1a;iVX也有免费直播课《第八期直播课》 一、首页制作 首页预览如下&#xff1a; 首先在博客页创建一个相对应项目&#xff1a; 接着选择前台&#xff0c;创建一个页面&#xff0c;命名为首页&#xff1a; 接着更改当前屏幕为小屏尺寸&#xff1a; 接着我们分…

Saga体系结构模式:微服务架构下跨服务事务的实现

在服务端应用程序中&#xff0c;我们往往会通过事务处理来保证数据一致性&#xff08;Data Consistency&#xff09;&#xff0c;例如&#xff1a;当用户从库存中取走了一定数量的物品&#xff0c;这些物品会体现在用户的提货单上&#xff0c;与此同时&#xff0c;库存中物品的…

GPhone、OPhone、UPhone、APhone、IPhone:满城尽带XPhone

本文为原创&#xff0c;如需转载&#xff0c;请注明作者和出处&#xff0c;谢谢&#xff01; 最近一段时间智能手机市场是翻天覆地。各大厂商纷纷推出自己的手机操作系统和手机。Google、Apple、中国移动、中国联通纷纷推出或即将推出自已 的智能手机操作系统&#xff08;虽…

二、文章发布页制作及后台实现《iVX低代码/无代码个人博客制作》

注&#xff1a;iVX也有免费直播课《第八期直播课》 一、文章编辑页制作 当首页制作完毕后&#xff0c;需要显示内容就需要有文章数据&#xff0c;此时我们创建一个文章编辑页增加对应的数据。 那么我们创建一个页面&#xff0c;命名为文章发布页&#xff1a; 接着我们查看标…

VS2013配置pro*C/C++开发环境

2019独角兽企业重金招聘Python工程师标准>>> 1、软件&#xff1a;VS2013&#xff0c;oracle10g 2、VS2013 新建VC空项目&#xff0c;然后在源文件中新建一个*.pc文件&#xff08;不知道我的配置哪儿有问题&#xff0c;新建的pc文件必须和工程同名&#xff09;&#…

Windows 11 23H2 25131 推送!全新搜索体验,优化应用商店

面向 Dev频道的 Windows 预览体验成员&#xff0c;微软现已推送 Windows 11 预览版 Build 25131。主要变化1.微软为 Windows 11 搜索引入全新体验&#xff0c;当您在搜索结果中点击“打开文件位置”时&#xff0c;现在将选择文件资源管理器中的文件&#xff0c;此前只是打开文件…

C# RichTextBox 实现循环查找关键字

实现效果如上图&#xff0c;点击“Search”按钮&#xff0c;开始从文首查找关键字“menu”&#xff0c;并高亮&#xff0c;再次点击“Search”按钮&#xff0c;继续查找下一个。查找到文末&#xff0c;自动从文首重新查找。 private int _searchIndex 0;//查找开始位置/// <…

网站常见漏洞-- XSS攻击

跨站攻击&#xff0c;即Cross Site Script Execution(通常简写为XSS&#xff0c;因为CSS与层叠样式表同名&#xff0c;故改为XSS) 是指攻击者利用网站程序对用户输入过滤不足&#xff0c;输入可以显示在页面上对其他用户造成影响的HTML代码&#xff0c;从而盗取用户资料、利用用…

【ArcGIS遇上Python】从入门到精通系列之第一章:ArcGIS Python简介

文章目录1. Python简介2. Python的特点3. ArcGIS的脚本语言4. ArcGIS中的Python脚本编辑器1. Python简介 Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell)&#xff0c;随着版…

C# RichTextBox 做简单的HTML代码编辑器 ---------左侧显示行号

说明&#xff1a;此显示行号为实际行号&#xff0c;不论是空行还是自动换行&#xff0c;都计算在内&#xff0c;跟实际IDE的行号不同&#xff0c;同步滚动会有半行高度以内的误差。 实现原理&#xff0c;在RichTextBox 编辑器左侧放置另一RichTextBox &#xff08;或其它控件也…

五、文章详情页制作及跳转功能实现《iVX低代码/无代码个人博客制作》

注&#xff1a;iVX也有免费直播课《第八期直播课》 一、详情页制作 在之前的章节中&#xff0c;我们已经制作完毕了登录、注册、首页等内容&#xff0c;在这一节中&#xff0c;我们编写详情页以及详情页功能制作。 详情页页面如下&#xff1a; 详情页头部也就是一个头部栏&…

c++ 数据类型转换: static_cast dynamic_cast reinterpret_cast const_cast

c 数据类型转换&#xff1a; static_cast dynamic_cast reinterpret_cast const_cast 【版权声明】转载请注明出处 http://www.cnblogs.com/TenosDoIt/p/3175217.html【目录】 引言 static_cast 定义 dynamic_cast 定义 举例&#xff1a;下行转换&#xff08;把基类的指针或引用…

日用有余!国产中科方德桌面操作系统初体验

国产IT圈里最受关注的话题&#xff0c;除了芯片想必就是操作系统了。但真说起国产操作系统&#xff0c;大家是既熟悉又陌生&#xff0c;听说过的多而真正使用过的少。而伴随产业发展&#xff0c;市面上也涌现出众多国产操作软件&#xff0c;这些系统是否好用&#xff1f;能否满…