欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[ASP.NET Core 3.0学习笔记] - SignalR

程序员文章站 2023-12-28 17:32:40
...

SignalR简介

SignalR是一个.NET Core/.NET Framework的开源实时框架. SignalR的可使用

  1. Web Socket
  2. Server Sent Events
  3. 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

客户端代码的.cshtmlhtml文件里需要引用两个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();
  1. connection.on();用于接收服务端发来的消息。绑定事件的事件名将被服务端以字符串形式调用。
  2. connection.start().then();用于连接建立成功后的处理。
  3. 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

日志与诊断

上一篇:

下一篇: