signalr全套系列之在.net6中实signalr通信

dotNET跨平台 dotNET跨平台     2022-12-05     636

关键词:

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

前文回顾

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

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

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

SignalR 的基本使用

简介

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

服务端实现

新建.net6项目

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库

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')
 3
 4    // 调用AllClientResponse这个方法
 5    const all = () => connection.send('AllClientResponse')
 6
 7    // 触发后台控制器
 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实现客户端与服务端通信的基本方法,下篇文章将演示分组通信

signalr

 http://blog.csdn.net/kesalin/article/details/8166925 打开NuGet的packagemanagerconsole(Tools->Librarypackagemanager),输入:install-packageSignalR.Sample,回车安装后台: usingMicrosoft.AspNet.Signa 查看详情

移动端的坑之在可编辑的div中实现placeholder

1.当我们个 div设置了contenteditable="true"这个块状元素就可以编辑了,如果要实现 placeholder直接写上去是没有效果的<divcontenteditable="true"placeholder="pleasewriteinfomation"></div>//没有效果 2.可以添加样式来实现*[contented 查看详情

javascript 文件挂起时 SignalR 连接块

】javascript文件挂起时SignalR连接块【英文标题】:SignalRconnectblockswhilejavascriptfileispending【发布时间】:2021-10-1216:23:27【问题描述】:我在包含标准google标签管理器脚本的页面上使用SignalR。该脚本是异步加载的(defer=true)。SignalR用... 查看详情

signalr系列教程:signalr快速入门

---恢复内容开始---本篇是SignalR系列教程的第一篇,本篇内容介绍了如何创建SignalR应用,如何利用SignalR搭建简易的聊天室等,本篇内容参考自:http://www.asp.net/signalr/overview/older-versions/tutorial-getting-started-with-signalr,文中会有我对实例代... 查看详情

signalr学习系列4.signalr广播程序

创建项目创建一个空的Web项目,并在Nuget里面添加SignalR,jQueryUI包,添加以后项目里包含了jQuery,jQuery.UI,和SignalR的脚本。 服务端代码创建Stock类usingSystem;namespaceSignalRDemo4{publicclassStock{privatedecimal_price;publicstringSymbol{get;se 查看详情

signalr学习系列3.signalr实时高刷新率程序

创建项目创建一个空的Web项目,并在Nuget里面添加SignalR,jQueryUI包,添加以后项目里包含了jQuery,jQuery.UI,和SignalR的脚本。 创建基础应用添加一个SignalRHub类,并命名为MoveShapeHub,更新代码。usingMicrosoft.AspNet.SignalR;usingNewtonsof... 查看详情

signalr学习系列2.第一个signalr程序

新建项目1.使用VisualStudio2015新建一个Web项目2.选择空模板3.添加一个新的SignalRHubClass(v2)类文件,并修改类名为ChatHub 4.修改ChatHub代码usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingMicrosoft.AspNe 查看详情

signalr系列教程:在mvc在使用signalr

本章主要内容:1:向MVC5添加SignaIr2:什么是集线器,如何创建集线器3:客户端通过jqery调用集线器 本文还是延续“SignaIR快速入门”中聊天室的例子进行讲解。首先我们通过VisualStudio创建MVCWeb应用,并使用“程序包管理控... 查看详情

signalr系列教程:服务器广播与主动数据推送

本篇是本系列入门篇的最后一遍,由于工作关系,接触SignalR的时间不是很多。等下次有空的话我会写一个利用“SignalR”开发一个在线聊天室的系列博文。近期的话我更偏向于更新框架设计相关的文章,到时候我会在文章中分... 查看详情

git系列四之在本地服务器搭建gitlab仓库管理(centeros环境下)(代码片段)

  现在本地已经创建了git仓库,又在gitlab上创建了一个git仓库,并且让这两个仓库进行远程同步,这样gitlab仓库既可以备份也可以与他人协作管理远程仓库以及根据需要推送或拉取数据。   管理远程仓库包括了如何添加... 查看详情

SignalR 与 Xamarin 客户端在调用 StartAsync() 方法时获得“CERTIFICATE_VERIFY_FAILED”

】SignalR与Xamarin客户端在调用StartAsync()方法时获得“CERTIFICATE_VERIFY_FAILED”【英文标题】:SignalRwithXamarinclientgetting"CERTIFICATE_VERIFY_FAILED"oncallingStartAsync()method【发布时间】:2020-07-0219:24:38【问题描述】:从我的Xamarin客户端调... 查看详情

signalr(代码片段)

SignalRhttps://docs.microsoft.com/zh-cn/aspnet/core/signalr/introduction?view=aspnetcore-3.11.SignalR是什么ASP.NETSignalR是一个ASP.NET下的类库,可以在ASP.NET的Web项目中实现实时通信。就是让客户端(Web页面)和服务器端可以互相通知消息及调用方法,当... 查看详情

可下载!vue3+.net6实战系列:通用管理后台

.NETFramework停更3年,4月份还又停止了3个版本支持,居然还有人没怎么接触.NET跨平台!真的该好好学下.NET6了,已经是不得不学了!好好看下这套《Vue3+.NET6前后端分离电商实战》免费教程,完整的源码... 查看详情

如何通过 SignalR 实现“谁在打字”功能?

】如何通过SignalR实现“谁在打字”功能?【英文标题】:Howtoimplement\'Whoistyping\'featureviaSignalR?【发布时间】:2014-11-0317:14:29【问题描述】:基本上,我正在我的网站中实现SignalR聊天。我已经可以向所有连接的用户发送消息,现... 查看详情

signalr简单封装(代码片段)

...浏览器)主动发起请求,那么,这个问题怎么解?Asp.NetSignalR是一个Asp.Net 下的类库,可以在Asp.Net 的Web项目中实现实时通信,完美解决这个问题。关于SignalR具体的介绍可以查阅其他资料,或者查看官方文档:http: 查看详情

适合android进阶人群的全套系列学习资料,限时免费开源

...辛苦整理两个月,我终于不负所托完成任务。以下的全套系列学习资料请收好!首先,Andr 查看详情

SignalR 可以与任何数据库一起使用吗? [关闭]

】SignalR可以与任何数据库一起使用吗?[关闭]【英文标题】:CanSignalRbeusedwithANYdatabase?[closed]【发布时间】:2017-02-1307:41:33【问题描述】:我需要在我的应用程序中实现推送技术。我需要在网页上显示数据,因为它实时插入到数... 查看详情

asp.netcoreblazor编程系列一——综述(代码片段)

一、NET6概述.NET6提供.NET统一计划的最终部分,该计划在.NET5中启动。.NET6在移动、桌面、IoT和云应用之间统一了SDK、基础库和运行时。除了这方面的统一以外,.NET6生态系统还提供了以下功能:简化开发:轻松入门... 查看详情