SignalR在ASP.NET CORE下的使用
SignalR是微软提供的实时Web通信的库,
它会自己根据情况使用不同的链接方式,主要有
- WebSocket
- long polling
- Forever frame
- Sever Events Sent
等方式,故可以不管其具体的实现方式,差不多等于开箱即用了。
一.StartUp中的起始配置
在StartUp中添加配置
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddSignalR(); //只需要添加AddSignalR
services.AddControllers();
services.AddCors(options =>
options.AddPolicy("lingluAllCors",
p => p.AllowAnyOrigin().
AllowAnyHeader().
AllowAnyMethod()));
#endregion
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapRazorPages();
//添加/注册对应的Hub类,并添加路由
//请注意:在不同的.Net Core版本中,MapHub方法也可能在app中
//如果找不到MapHub请两个地方都试一试
endpoints.MapHub<ChatHub>("/chatHub");
});
app.UseCors("lingluAllCors");
}
二.配置Hub中心类和服务器推送信息
Hub类是SignalR的核心工具类
它主要有两个功能
1. 向Client(浏览器)的监听处主动推送消息【服务器主动推送数据】
2.接受Client的发起的信息(请求),【普通的请求----->响应模式】
例:Hub类的简单解释
public class ChatHub : Hub
{
//继承Hub类可以复写
//Task OnDisconnectedAsync(Exception exception)
//Task OnConnectedAsync()
//以上方法在Client链接/断开时被触发,而推送/接受信息的方法则需要你自定义
//Hub里的方法不在后台调用,而是通过函数名和参数在前端进行js调用
public async Task SendMessage(string user, string message)
{
//这里和普通的 请求---->响应 的方式很像
//在这里拿到参数,写一些逻辑
Console.WriteLine("User is"