SuperAPI AI 工具集

signalr

编程与开发

查看项目

更新于 10-16 02:41

技能介绍

用途

SignalR 技能用于在 ASP.NET Core 应用中实现基于 WebSocket 的实时客户端-服务器通信。它主要服务于两类实时场景:一是通过 ActionsHub(蓝图服务)推送工作流操作通知;二是通过 RegisterHub(注册服务)推送账本(Register)相关事件。两个 Hub 都采用基于分组(Group)的广播方式,并使用查询参数携带 JWT 进行身份认证。

主要能力

  • 强类型 Hub:通过 Hub<IRegisterHubClient> 定义客户端接口,获得编译期类型安全。示例接口 IRegisterHubClient 包含 RegisterCreated 和 TransactionConfirmed 等方法。
  • 分组路由:使用 Groups.AddToGroupAsync 将连接加入指定分组,按分组广播消息。常见分组命名包括 wallet:{address}、register:{id}、tenant:{id}。
  • 从服务中发送:注入 IHubContext<THub>,在业务服务中调用 _hubContext.Clients.Group(...).SendAsync(...) 向指定分组推送消息。
  • JWT 认证:客户端连接时通过 ?access_token={jwt} 查询参数传递令牌完成认证。

使用方式

Hub 注册在 Program.cs 中完成:先调用 builder.Services.AddSignalR(),再在认证中间件之后映射 Hub,例如 app.MapHub<ActionsHub>("/actionshub")、app.MapHub<RegisterHub>("/hubs/register")。

发送消息时需要注入 IHubContext,例如 NotificationService 中通过 _hubContext.Clients.Group($"wallet:{notification.WalletAddress}").SendAsync("ActionConfirmed", notification, ct) 推送通知。

客户端连接(测试用)通过 HubConnectionBuilder 构建:使用 WithUrl($"{baseUrl}/actionshub?access_token={jwt}"),通过 connection.On<ActionNotification>("ActionConfirmed", ...) 注册消息处理,调用 StartAsync() 启动连接,并用 InvokeAsync("SubscribeToWallet", walletAddress) 订阅。

服务抽象模式:为解耦业务逻辑与 SignalR 实现,可定义接口(如 INotificationService)并在依赖注入中注册(builder.Services.AddScoped<INotificationService, NotificationService>())。

适用场景

适用于需要在 ASP.NET Core 中实现实时通知、工作流状态推送、账本事件订阅等场景,尤其适合使用分组广播进行针对性消息分发的多租户或多钱包架构。

相关技能与限制

相关技能包括 aspire(服务编排与配置)、jwt(Hub 连接认证令牌设置)、redis(扩展用的 Backplane 配置)、xunit(集成测试模式)、fluent-assertions(Hub 测试断言)。

官方文档可通过 Context7 获取,推荐库 ID 为 /websites/learn_microsoft_en-us_aspnet_core,建议查询“SignalR hub groups authentication”“SignalR Redis backplane scaling”“SignalR strongly typed hubs”等主题。

关于收费、价格、平台兼容性等细节,当前资料暂未提供。