ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

用ASP.NET Core SignalR打造实时聊天应用:5步从Hub到用户分组实战

用ASP.NET Core SignalR打造实时聊天应用:5步从Hub到用户分组实战 用ASP.NET Core SignalR打造实时聊天应用5步从Hub到用户分组实战【免费下载链接】AspNetCore.DocsDocumentation for ASP.NET Core项目地址: https://gitcode.com/gh_mirrors/as/AspNetCore.DocsASP.NET Core SignalR是 .NET 生态中最常用的实时通信库它让服务器能够主动向浏览器推送消息无需轮询刷新。本文面向新手用 5 个步骤带你从零搭建一个SignalR 实时聊天应用并学会用户分组聊天房间这一核心实战技巧——这是构建聊天室、协作白板、实时通知类应用的关键能力。为什么选择 SignalR传统网页需要客户端不停轮询服务器才能拿到新数据而 SignalR 通过Hub中心集线器建立一条双向实时通道自动管理连接断线重连、心跳保活都不用你操心自动选择传输方式优先使用性能最好的 WebSockets不支持时自动降级到 Server-Sent Events、长轮询双向调用客户端可以调用服务器方法服务器也可以调用客户端方法 官方介绍ASP.NET Core SignalR 概述适合聊天、游戏、仪表盘、实时通知等高频更新场景。第1步创建 ASP.NET Core Web 项目启动 Visual Studio在起始窗口选择Create a new project然后在对话框中选择ASP.NET Core Web App (Razor Pages)模板项目名称输入SignalRChat框架选择最新的 .NET 长期支持版本LTS点击创建。使用命令行也可以一步完成dotnet new webapp -o SignalRChat第2步配置并创建 SignalR HubHub 是 SignalR 中客户端与服务器通信的高层管道。做两件事1在 Program.cs 中注册 SignalR 服务并映射 Hub 端点AddSignalR()MapHubChatHub()2新建一个继承自Hub基类的 ChatHub其中每个public方法都可以被客户端调用。例如定义一个SendMessage方法接收用户姓名和消息内容。⚠️ 小提醒Hub 是瞬态transient服务每次方法调用都会使用新的实例不要在 Hub 类的属性里存状态。详见 使用 Hub 指南。第3步引入 SignalR 客户端库在浏览器端需要一个 JS 客户端库来连接 Hub。推荐两种方式通过LibMan库管理器添加aspnet/signalr包官方教程在 tutorials/signalr 中有完整截图演示通过 CDN 引入script标签生产环境请谨慎使用第三方 CDN第4步广播消息给所有在线用户在 Hub 的SendMessage方法里通过Clients.All把消息推送给所有已连接客户端——这是最简单的全员广播模式await Clients.All.SendAsync(ReceiveMessage, name, message);客户端用.on(ReceiveMessage, ...)监听该事件收到后把消息追加到页面列表。两个窗口打开同一个页面互发消息即时送达——这就是实时聊天的雏形。Clients对象还提供了更精细的定向能力如Clients.Caller只回复发送者、Clients.Others发给除自己外的所有人完整对照表见 hubs.md。第5步用户分组——打造多房间聊天室 全员广播无法支撑多房间场景。SignalR 的分组Groups正是为此设计每个房间 一个命名的连接集合一条连接可以加入多个分组。核心 API 只有两个见 管理 SignalR 用户与分组方法作用Groups.AddToGroupAsync(groupName)把当前连接加入指定分组Groups.RemoveFromGroupAsync(groupName)把当前连接移出分组配合发送端Clients.Group(房间名).SendAsync(...)消息就只会投递到该房间的成员。以官方分组示例 ChatHub 为参考聊天室的骨架就是这样// 进入房间 public async Task JoinRoom(string room) await Groups.AddToGroupAsync(room); // 发送消息只给同房间的人 public async Task SendMessage(string room, string text) await Clients.Group(room).SendAsync(NewMessage, text);几个实战要点用户名下可有多条连接手机 电脑用Clients.User(用户ID)能同时送达该用户的所有设备用户标识通过Context.UserIdentifier获取重复加入同一分组是安全的不会抛异常分组保存在内存中服务器重启后清空断线重连后需要重新JoinRoom分组名区分大小写如需跨多服务器扩展可结合 Redis 背板 或 Azure SignalR 服务持久化分组进阶路线从 Demo 走向生产 完成这 5 步后你可以沿以下路径继续深入均为仓库内文档直接打开即可安全SignalR 认证与授权——聊天应用必须验证用户身份性能与压缩性能最佳实践多实例扩展扩展 SignalR 到多台服务器问题排查SignalR 诊断与日志完整聊天示例代码SignalRChat 完整样本掌握 Hub 分组这套组合拳你就拥有了构建聊天室、在线协作、实时通知等应用的完整地基。动手跑一遍示例是理解 SignalR 最快的方式【免费下载链接】AspNetCore.DocsDocumentation for ASP.NET Core项目地址: https://gitcode.com/gh_mirrors/as/AspNetCore.Docs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表