如何在.Net Core环境下使用SignalR实现高效实时通信?

2026-04-28 16:052阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1000个文字,预计阅读时间需要4分钟。

如何在.Net Core环境下使用SignalR实现高效实时通信?

【SignalR全系列】在.Net Core中实现SignalR实时通信+微信公众号:趣编程ACE关注了解更多的.NET日常实战开发技巧,如需源码请公众号后台留言+源码+[如觉得本公众号对您有帮助,请留言]

之在.Net Core 中实现SignalR实时通信

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

前文回顾

之在.NetCore中实现WebSocket双工通信

之在.Net Core 中实现Server-Send Events消息推送

之在.Net Core 中实现长轮询


SignalR 的基本使用
原文链接:之在.Net6中实SignalR通信

简介

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

服务端实现

新建.net6项目

如何在.Net Core环境下使用SignalR实现高效实时通信?

编辑

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 2publicclassCustomHub:Hub<ClientData>{}

4.重写Hub 中 连接和关闭连接方法

1///<summary> 2///重写链接钩子 3///</summary> 4///<returns></returns> 5publicoverrideTaskOnConnectedAsync() 6{ 7returnbase.OnConnectedAsync(); 8} 9 10publicoverrideTaskOnDisconnectedAsync(Exception?exception) 11{ 12returnbase.OnDisconnectedAsync(exception); 13}

5.构造函数中引入日志中间件

1//引入日志方便控制台输出 2privatereadonlyILogger<CustomHub>_logger; 3 4publicCustomHub(ILogger<CustomHub>logger) 5{ 6this._logger=logger; 7}

6.编写与客户端通信方法

1///<summary> 2///建立通信 3///</summary> 4///<paramname="data"></param> 5publicvoidBeginSendData(TransDatadata) 6{ 7_logger.LogInformation("接受数据{0},{1}",data.id,data.message); 8} 9 10///<summary> 11///单一客户端调用通信 12///仅仅通知调用的那个客户端其余建立链接的客户端不生成通信 13///</summary> 14///<returns></returns> 15publicTaskSingleClientCaller() 16{ 17_logger.LogInformation("单独客户端调用"); 18returnClients.Caller.ClientHook(new(111,"111客户端调用")); 19} 20 21///<summary> 22///所有客户端建立通信 23///可通知所有的客户端 24///</summary> 25///<returns></returns> 26publicTaskAllClientResponse() 27{ 28_logger.LogInformation("通知所有的客户端"); 29 30returnClients.All.ClientHook(new(Guid.NewGuid(),"通知所有的客户端")); 31} 32 33///<summary> 34///指定调用 35///</summary> 36///<returns></returns> 37[HubMethodName("invoke")] 38publicTransDataIvoData() 39{ 40returnnewTransData(666,"返回invokedata"); 41} 客户端实现

1.引用js库

编辑

2.编写调用脚本

1//初始化路由:/custom 被路由节点捕获 2letconnection=newsignalR.HubConnectionBuilder() 3.withUrl("/custom") 4.build();

1//开始连接调用后台BeginSendData方法成功后双方交互数据 2connection.start().then(()=>{ 3console.log("开始链接") 4letid=parseInt(Math.random()*100); 5connection.send('BeginSendData',{id:id,message:"链接成功了"}) 6});

1//调用SingleClientCaller这个方法 2constselfCall=()=>connection.send('SingleClientCaller') 3 4//调用AllClientResponse这个方法 5constall=()=>connection.send('AllClientResponse') 6 7//触发后台控制器 8consttriggerFetch=()=>fetch('/SendData') 9 10//callsignalRhubfunctionfromclient 11constwithReturn=()=>connection.invoke('invoke') 12.then(data=>console.log('ivodata',data))

1//后台默认触发 2connection.on("ClientHook",data=>console.log('客户端触发成功',data)); 3 4//后台指定方法触发之后 5connection.on("client_recive",data=>console.log('后台触发成功',data));


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

更多精彩内容尽在公众号:


本文共计1000个文字,预计阅读时间需要4分钟。

如何在.Net Core环境下使用SignalR实现高效实时通信?

【SignalR全系列】在.Net Core中实现SignalR实时通信+微信公众号:趣编程ACE关注了解更多的.NET日常实战开发技巧,如需源码请公众号后台留言+源码+[如觉得本公众号对您有帮助,请留言]

之在.Net Core 中实现SignalR实时通信

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

前文回顾

之在.NetCore中实现WebSocket双工通信

之在.Net Core 中实现Server-Send Events消息推送

之在.Net Core 中实现长轮询


SignalR 的基本使用
原文链接:之在.Net6中实SignalR通信

简介

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

服务端实现

新建.net6项目

如何在.Net Core环境下使用SignalR实现高效实时通信?

编辑

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 2publicclassCustomHub:Hub<ClientData>{}

4.重写Hub 中 连接和关闭连接方法

1///<summary> 2///重写链接钩子 3///</summary> 4///<returns></returns> 5publicoverrideTaskOnConnectedAsync() 6{ 7returnbase.OnConnectedAsync(); 8} 9 10publicoverrideTaskOnDisconnectedAsync(Exception?exception) 11{ 12returnbase.OnDisconnectedAsync(exception); 13}

5.构造函数中引入日志中间件

1//引入日志方便控制台输出 2privatereadonlyILogger<CustomHub>_logger; 3 4publicCustomHub(ILogger<CustomHub>logger) 5{ 6this._logger=logger; 7}

6.编写与客户端通信方法

1///<summary> 2///建立通信 3///</summary> 4///<paramname="data"></param> 5publicvoidBeginSendData(TransDatadata) 6{ 7_logger.LogInformation("接受数据{0},{1}",data.id,data.message); 8} 9 10///<summary> 11///单一客户端调用通信 12///仅仅通知调用的那个客户端其余建立链接的客户端不生成通信 13///</summary> 14///<returns></returns> 15publicTaskSingleClientCaller() 16{ 17_logger.LogInformation("单独客户端调用"); 18returnClients.Caller.ClientHook(new(111,"111客户端调用")); 19} 20 21///<summary> 22///所有客户端建立通信 23///可通知所有的客户端 24///</summary> 25///<returns></returns> 26publicTaskAllClientResponse() 27{ 28_logger.LogInformation("通知所有的客户端"); 29 30returnClients.All.ClientHook(new(Guid.NewGuid(),"通知所有的客户端")); 31} 32 33///<summary> 34///指定调用 35///</summary> 36///<returns></returns> 37[HubMethodName("invoke")] 38publicTransDataIvoData() 39{ 40returnnewTransData(666,"返回invokedata"); 41} 客户端实现

1.引用js库

编辑

2.编写调用脚本

1//初始化路由:/custom 被路由节点捕获 2letconnection=newsignalR.HubConnectionBuilder() 3.withUrl("/custom") 4.build();

1//开始连接调用后台BeginSendData方法成功后双方交互数据 2connection.start().then(()=>{ 3console.log("开始链接") 4letid=parseInt(Math.random()*100); 5connection.send('BeginSendData',{id:id,message:"链接成功了"}) 6});

1//调用SingleClientCaller这个方法 2constselfCall=()=>connection.send('SingleClientCaller') 3 4//调用AllClientResponse这个方法 5constall=()=>connection.send('AllClientResponse') 6 7//触发后台控制器 8consttriggerFetch=()=>fetch('/SendData') 9 10//callsignalRhubfunctionfromclient 11constwithReturn=()=>connection.invoke('invoke') 12.then(data=>console.log('ivodata',data))

1//后台默认触发 2connection.on("ClientHook",data=>console.log('客户端触发成功',data)); 3 4//后台指定方法触发之后 5connection.on("client_recive",data=>console.log('后台触发成功',data));


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

更多精彩内容尽在公众号: