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();
用于发送消息。调用方式与connection.on();
基本一致,都是通过方法名字符串加参数列表的形式。
剩下的就是与业务相关的前端页面信息及逻辑了。
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客户端。
流式处理Stream
ASP.NET Core SignalR 支持从客户端传输到服务器以及从服务器传输到客户端。 这适用于数据片段随着时间的推移而发生的情况。 流式传输时,每个片段一旦变为可用,就会发送到客户端或服务器,而不是等待所有数据都可用。
connection.stream
。一般SignalR连接,使用connection.on
来添加监听器,但是在使用流式传输的时候,改用connection.stream
方法。从使用效果来看,stream有点像是invoke与on的组合结果。通过invoke调用服务端方法,并接收对应的流数据。stream里添加方法,close
,next
,complete
,error
来应对各种需求。
https://www.cnblogs.com/lwqlun/p/9839305.html