使用 SignalR 在 .NET Core 8 中构建实时通知的最小 API

💡 原文中文,约6900字,阅读约需17分钟。
📝

内容提要

SignalR是一个强大的ASP.NET库,用于实现服务器端和客户端之间的实时通信。它支持实时更新、简化开发、跨平台、自动重新连接和可扩展性。本指南演示了如何使用SignalR在.NET Core 8中创建实时通知。首先安装SignalR包,然后创建ASP.NET Core Web API项目,并添加SignalR服务和StockHub类。接下来创建后台服务Worker.cs,用于持续推送通知。最后,创建SignalR接收器和客户端,实现实时通知终端节点。

🔎

延伸解读

后台服务推送与手动端点的区别

文章中的Worker后台服务每4秒自动生成随机股票价格并广播,适合模拟持续数据流;而MapPost定义的sendStockNotification端点允许外部通过HTTP POST触发广播,适合按需推送。两者都使用IHubContext<StockHub>,但触发机制不同:前者是定时循环,后者是请求驱动。读者可根据实际场景选择,例如实时监控用后台服务,事件通知用端点。

客户端连接与自动重连的注意事项

文章示例中,控制台客户端和HTML客户端都直接调用StartAsync或start建立连接,但未显式配置自动重连。虽然SignalR库本身支持自动重连,但需要开发者主动设置withAutomaticReconnect。若未配置,连接断开后不会自动恢复。此外,客户端需处理连接失败和优雅关闭,如控制台示例使用CancellationToken和Ctrl+C事件,HTML示例监听beforeunload事件停止连接。

StockHub中方法定义与广播方式

StockHub类继承Hub,定义了SendStockPrice方法,但实际广播使用的是Clients.All.SendAsync,而非直接调用SendStockPrice。这意味着SendStockPrice方法在示例中未被使用,可能用于客户端调用。广播时,服务器通过IHubContext调用SendAsync,向所有客户端发送"ReceiveStockPrice"消息。读者应注意,Hub方法通常供客户端调用,而服务器主动推送应使用IHubContext。

❓

Q&A

SignalR是什么,它的主要功能有哪些?

SignalR是一个ASP.NET库,用于实现服务器端和客户端之间的实时通信,支持实时更新、简化开发、跨平台、自动重新连接和可扩展性。

如何在.NET Core 8中安装SignalR?

可以通过Visual Studio中的NuGet包管理器控制台使用命令Install-Package Microsoft.AspNetCore.SignalR来安装SignalR包。

如何创建SignalR的后台服务以推送通知?

创建一个Worker类,继承自BackgroundService,在ExecuteAsync方法中使用循环持续推送通知,并通过IHubContext发送消息。

SignalR客户端如何接收实时通知?

客户端通过HTML和JavaScript建立与SignalR的连接,并注册一个处理程序来接收来自服务器的消息。

如何在SignalR中实现股票价格的实时更新?

通过创建一个终端节点,客户端发送包含股票名称和价格的POST请求,服务器使用SignalR广播更新到所有连接的客户端。

SignalR的自动重新连接功能有什么优势?

自动重新连接功能确保在连接断开时能够自动恢复连接,从而提高实时通信的可靠性。

🏷️

标签

➡️

继续阅读