开发者中心 开发者中心
  • 简体中文
  • English
视频教程
敢为云网站
  • 6.0版本
  • 6.1 版本
视频教程
敢为云网站
  • 平台概述
  • 平台功能
  • 平台安装
  • 开发者指南
    • 协议插件开发
    • 扩展插件开发
    • 报警插件开发
    • 应用插件开发
      • 前端Web界面开发
        • 基于脚手架开发
        • 独立构建开发项目
        • 公共方法
        • 敢为UI
      • 前端H5界面开发
      • 后端接口开发
      • 工作流程开发
      • 插件打包和发布
      • 应用自定义通知
        • 功能概述
        • 核心技术依赖
        • 核心实体类说明
          • SignalREvent 类定义
          • 特性说明
        • 对接流程
          • SignalR 连接建立
          • 订阅 “获取待处理消息” 事件
          • 返回待处理数
          • 发布待处理数事件
          • 前端交互处理
        • 对接规范
      • 应用单元测试
    • Web可视化开发
    • 3D可视化开发
    • 桌面可视化开发
    • 小程序开发
    • 应用模块接口
  • 项目实战
  • 附录

SignalR推送消息

# SignalR推送消息

# 功能概述

你需要对接的平台统一通知中心,是基于 SignalR 实现的全局消息通知能力。用户登录后系统会自动建立 SignalR 通信链路,通知中心(MonitorHub)会主动触发 “获取待处理消息” 事件,各业务模块订阅对应事件并返回待处理数据量,最终由 MonitorHub 汇总后在前端顶部通知入口统一展示;用户点击不同类型通知时,将触发对应业务模块的独立处理逻辑(接口调用 / 弹窗展示)。

# 核心技术依赖

通信框架:SignalR(用于服务端与前端的实时双向通信)

事件总线:本地事件总线(ILocalEventBus),用于事件发布与订阅

核心实体:SignalREvent(跨库订阅响应模型)

/// <summary>
/// 跨库订阅响应模型
/// 事件名称 : Ganweisoft.IoTCenter.Module.SignalREvent
/// </summary>
[EventName("Ganweisoft.IoTCenter.Module.SignalREvent", true)]
public class SignalREvent
{
    public string userName { get; set; }
    /// <summary>
    /// 事件名称
    /// </summary>
    public string eventName { get; set; }
    /// <summary>
    /// 事件数据
    /// </summary>
    public object eventData { get; set; }
}

# 核心实体类说明

# SignalREvent 类定义

该类是跨业务模块的事件通信载体,用于传递 “待处理消息数” 相关事件数据,核心字段说明如下:

字段名 数据类型 必填 说明
userName string 是 触发事件的用户名(关联登录态)
eventName string 是 事件名称(如 "ToDoMainCount" 标识待处理数)
eventData object 是 事件数据(通常为待处理消息数量,int 类型)

# 特性说明

[EventName("Ganweisoft.IoTCenter.Module.SignalREvent", true)]

第一个参数:全局唯一的事件标识,所有业务模块均需使用该标识订阅 / 发布事件;

第二个参数:是否为跨库事件(固定为 true)。

# 对接流程

# SignalR 连接建立

用户登录后,系统自动完成 MonitorHub 的 SignalR 连接建立,无需业务模块额外处理。

# 订阅 “获取待处理消息” 事件

各业务模块需订阅 MonitorHub 发布的 “获取待处理消息” 事件(核心事件名:ToDoMainCount),并实现待处理数的计算逻辑。

# 返回待处理数

业务模块接收到事件后,根据当前登录用户(userName)计算对应业务的待处理消息数量,并通过 SignalREvent 返回。

特别注意:前端不做任何累加处理,后台推送多少就显示多少。如后台第一次推送100,前端就显示100,第二次推送50,前端就显示50。

# 发布待处理数事件

业务模块通过本地事件总线(ILocalEventBus)发布包含待处理数的 SignalREvent 事件,示例代码如下:

// 注入本地事件总线
private readonly ILocalEventBus _localEventBus;
// 构建事件实体
 var addEvent = new SignalREvent()
 {
     userName = _session.UserName,
     eventName = "ToDoMainCount",
     eventData = totalCount
 };
// 发布事件至MonitorHub
 await _localEventBus.PublishAsync<SignalREvent>(addEvent);

# 前端交互处理

MonitorHub 汇总所有业务模块的待处理数后,前端统一展示;

前端配置页面如下:

# 对接规范

事件名称规范:所有业务模块统一使用ToDoMainCount作为 “获取待处理消息” 事件名称,不可自定义;

数据类型规范:eventData 字段优先使用 int 类型(待处理数量),如需传递复杂数据需提前与平台侧确认;

性能要求:待处理数计算逻辑需控制在 100ms 内完成,避免阻塞 SignalR 通信;

异常处理:业务模块需捕获计算待处理数时的异常,默认返回 0,避免影响全局通知中心运行。

环境依赖规范:业务模块对接前需完成基座安装和配置管理模块更新。

上次更新: 2026/3/6 09:14:09

← 插件打包和发布 应用单元测试→

目录
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式