SignalR 实现 ASP.NET Core 实时通信,通过 Hub 类处理连接与消息广播,如 SendMessage 方法调用 Clients.All.SendAsync 向所有客户端推送;在 Program.cs 中添加 AddSignalR 和 MapHub 配置路由;前端引入 signalr.min.js,使用 HubConnectionBuilder 连接 /chathub,调用 connection.on 接收消息,invoke 发送;还可通过 IHubContext 在控制器中主动推送,如 NotifyController 调用 _hubContext.Clients.All.SendAsync 触发通知。

SignalR 是 ASP.NET Core 提供的一个库,用于在 Web 应用中实现**实时双向通信**。传统的 HTTP 请求是客户端发起、服务器响应的模式,而 SignalR 让服务器可以主动向客户端推送数据,适用于聊天应用、实时通知、仪表盘更新等场景。
它自动选择最佳通信方式,支持以下几种底层传输协议:
- WebSockets:性能最好,全双工通信,优先使用
- Server-Sent Events
- 长轮询(Long Polling)
开发者无需关心底层细节,SignalR 会根据浏览器和服务器环境自动协商。
如何使用 SignalR 实现 Web 实时通信?
下面是一个简单的示例,展示如何在 C# 的 ASP.NET Core Web 应用中使用 SignalR 实现客户端与服务器之间的实时消息传递。
1. 创建 Hub 类(服务端核心)
Hub 是 SignalR 的中心类,负责处理客户端连接、方法调用和消息广播。
using Microsoft.AspNetCore.SignalR;public class ChatHub : Hub { public async Task SendMessage(string user, string message) { await Clients.All.SendAsync("ReceiveMessage", user, message); } }
这个 Hub 定义了一个 SendMessage 方法,当被调用时,会通过 Clients.All.SendAsync 向所有连接的客户端广播消息,并触发客户端的 ReceiveMessage 方法。
2. 配置 Startup 或 Program 文件
在 Program.cs 中注册 SignalR 服务并映射 Hub 路由。
var builder = WebApplication.CreateBuilder(args);// 添加 SignalR 服务 builder.Services.AddSignalR();
var app = builder.Build();
app.UseRouting();
// 映射 Hub,注意路径要匹配前端请求 app.MapHub
("/chathub"); app.Run();
3. 前端页面使用 JavaScript 连接
在 HTML 页面中引入 SignalR 客户端库,并建立连接。










