[ASP.NET Core 3.0学习笔记] - SignalR
SignalR简介
SignalR是一个.NET Core/.NET Framework的开源实时框架. SignalR的可使用
- Web Socket
- Server Sent Events
- Long Polling
作为底层传输方式.
SignalR基于这三种技术构建, 抽象于它们之上, 它让你更好的关注业务问题而不是底层传输技术问题.
SignalR这个框架分服务器端和客户端, 服务器端支持ASP.NET Core 和 ASP.NET; 而客户端除了支持浏览器里的javascript以外, 也支持其它类型的客户端, 例如桌面应用.
Microsoft Doc 官方文档 https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/signalr?view=aspnetcore-3.0&tabs=visual-studio
https://docs.microsoft.com/zh-cn/aspnet/core/signalr/introduction?view=aspnetcore-3.0
solenovex的SignalR讲解 https://www.cnblogs.com/cgzl/p/9515516.html
使用
Step1
使用ASP.NET Core 3.0框架。添加signalr.js
。
C#项目中创建一个继承Microsoft.AspNetCore.SignalR.Hub
的类,用于做传输控制。
配置SignalR。在Startup.cs
文件中services.AddSignalR()
与
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapHub<ChatHub>("/chatHub");
});
其中ChatHub
是实现的继承类。/chatHub
与客户端代码js文件里的连接项保持一致即可。
Step2
客户端代码的.cshtml
或html
文件里需要引用两个js文件。一个是SignalR的signalr.js
,一个是跟客户端业务相关的如chat.js
。chat.js
中,需要创建SignalR对象并绑定事件。这里的"/chatHub"
与上文保持一致。
var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();
这里需要注意的就是这几种模式
connection.on();
connection.start().then();
connection.invoke();
-
connection.on();
用于接收服务端发来的消息。绑定事件的事件名将被服务端以字符串形式调用。 -
connection.start().then();
用于连接建立成功后的处理。 -
connection.invoke();
用于向服务器发送消息。调用方式与服务端->客户端的形式基本一致,都是通过方法名字符串加参数列表的形式。
剩下的就是与业务相关的前端页面信息及逻辑了。
ps:connection
的使用可以查看signalr.js
代码。
服务端与客户端
服务端
命名空间为Microsoft.AspNetCore.SignalR
。
通过继承Hub
类派生控制器类。通过IHubContext<xxxHub>
实现依赖注入,无需使用全局单一实例。
使用Clients.User(userName)
与Clients.Group(groupName)
进行用户与组的控制。
使用Context.ConnectionId
管理连接id。
使用自定义对象参数来确保向后兼容。
客户端
命名空间Microsoft.AspNetCore.SignalR.Client
。
.Net客户端。Java客户端。JavaScript客户端。
配置文件
身份验证和授权
MessagePack
日志与诊断
推荐阅读
-
ASP.NET Core SignalR.NET 客户端
-
[ASP.NET Core 3.0学习笔记] - SignalR
-
ASP.NET Core 聊天室实现(SignalR)
-
Asp.Net Core 2.1 中 利用SignalR 服务端主动推送数据
-
Asp.Net Core使用SignalR进行服务间调用
-
asp.net core identity学习1
-
.Net core 3.0 SignalR+Vue 实现简单的IM(无jq依赖)
-
Asp.Net Core + SignalR 实现实时通信
-
ASP.NET学习笔记(五)-全球化部署,网站发布方法,AJAX使用,水晶报表使用,DropDownList,CheckBox全选
-
ASP.NET Core在支付宝小程序中使用signalR