[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以外, 也支持其它类型的客户端, 例如桌面应用.
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客户端。

浙公网安备 33010602011771号