ASP.NET Core SignalR怎么用 SignalR实时通信入门教程

SignalR 是 ASP.NET Core 提供的实时通信库,自动选择 WebSocket、SSE 或长轮询等最优传输方式,适用于聊天、通知、实时仪表盘等场景;服务端需定义 Hub 类并注册 SignalR 服务,客户端通过 JavaScript 连接并收发消息。

asp.net core signalr怎么用 signalr实时通信入门教程

SignalR 是什么,为什么选它

SignalR 是 ASP.NET Core 提供的实时通信库,能自动选择最优传输方式(WebSocket、Server-Sent Events 或长轮询),让你不用操心底层协议兼容性。它适合做聊天、通知、实时仪表盘、协同编辑等场景——写起来简单,跑起来稳定。

服务端:添加 Hub 并配置 SignalR

先创建一个继承 Hub 的类,比如 ChatHub,它就是客户端连接和调用的中心:

public class ChatHub : Hub
{
    public async Task SendMessage(string user, string message)
    {
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}

然后在 Program.cs 中注册 SignalR 服务并映射 Hub 路由

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSignalR(); // 注册服务

var app = builder.Build();
app.MapHub("/chat"); // 暴露端点,如 /chat

客户端:用 JavaScript 连接并收发消息

前端引入官方客户端库(推荐用 npm 安装 @microsoft/signalr,或直接 CDN):

DeepL Write

DeepL Write

DeepL推出的AI驱动的写作助手,在几秒钟内完善你的写作

下载

建立连接、监听服务端方法、调用服务端方法,三步到位:

const connection = new signalR.HubConnectionBuilder()
    .withUrl("/chat")
    .build();

// 监听服务端 SendAsync("ReceiveMessage", ...) 的调用
connection.on("ReceiveMessage", (user, message) => {
    console.log(`${user}: ${message}`);
});

// 启动连接
await connection.start();

// 调用服务端 SendMessage 方法
await connection.invoke("SendMessage", "Alice", "Hello World!");

常见注意点和小技巧

开发时容易卡住的地方,其实就几个关键细节:

  • Hub 类不能有构造函数注入(除非用 ITransientDependency 风格写法),推荐通过 HubContext 或属性注入获取服务
  • 客户端调用的方法名默认区分大小写,服务端方法名是 PascalCase,客户端用 camelCase 调用(如 sendMessage 对应 SendMessage
  • 连接断开后不会自动重连,需手动启用:.withAutomaticReconnect()
  • 开发环境建议打开详细日志:builder.Logging.AddConsole().SetMinimumLevel(LogLevel.Debug);,方便排查握手失败、CORS 或跨域问题

基本上就这些。跑通一次连接+发消息,后面加群组、用户管理、权限控制就顺了。

https://www.php.cn/faq/2034636.html

发表回复

Your email address will not be published. Required fields are marked *