如何在.Net Core环境下使用SignalR实现高效实时通信?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1000个文字,预计阅读时间需要4分钟。
【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项目
编辑
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分钟。
【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项目
编辑
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实现客户端与服务端通信的基本方法,下篇文章将演示分组通信
更多精彩内容尽在公众号:

