# @equinor/fusion-framework-module-signalr 中文文档

规范地址：https://npmcn.com/package/%40equinor/fusion-framework-module-signalr/

版本：14\.1\.0
npm 元数据更新时间：2026-11-12T09:57:13.491Z
中文译文更新时间：2026-11-14T00:12:24.188Z
软件包许可：ISC

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40equinor/fusion-framework-module-signalr
原文对照：https://npmcn.com/package/%40equinor/fusion-framework-module-signalr/?lang=original
源码仓库：https://github.com/equinor/fusion-framework

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：320 kB，31 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：4 个
- peer 依赖：@equinor/fusion-framework-module ^6\.2\.0，@equinor/fusion-framework-module-msal ^12\.1\.0，@equinor/fusion-framework-module-service-discovery ^10\.3\.0
- 首次发布：2023-01-26T13:20:00.842Z
- 最新版本发布：2026-11-12T09:57:13.270Z
- 近 30 天下载量：2740（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：122（近 12 个月 22 个）

## 中文简介

暂无中文简介

## 安装

```sh
npm install @equinor/fusion-framework-module-signalr
```

也可以使用：`pnpm add @equinor/fusion-framework-module-signalr`、`yarn add @equinor/fusion-framework-module-signalr`、`bun add @equinor/fusion-framework-module-signalr`

## README

# @ equinor/ 组合- 框架- 模块- 符号

实时通信的融合框架模块 [信号R](https://learn.microsoft.com/aspnet/core/signalr/introduction)。 。 。 .

提供基于RxJS的API,用于连接到信号R中枢,订阅服务器侧面方法,并发送消息回服务器. 枢机连接在所有订阅者不订阅时都会被计算出参考数并自动停止.

## 何时使用

当您的聚合应用程序需要时使用此模块:

-   从后端服务接收实时推取通知
-   通过信号R中枢订阅服务器发送事件
-   向信号R中枢方法发送消息

## 安装

```sh
pnpm add @equinor/fusion-framework-module-signalr
```

### 同伴依赖关系

| 软件包 | 需求 |
| --- | --- |
| `@equinor/fusion-framework-module` | 对 |
| `@equinor/fusion-framework-module-msal` | 否(自动购置令牌需要) |
| `@equinor/fusion-framework-module-service-discovery` | 否(服务发现短手需要) |

## 快开始

### 服务发现短手

最简单的路径 `enableSignalR` 与服务发现和MSAL。 中心URL和访问符自动解决:

```ts
import { enableSignalR } from '@equinor/fusion-framework-module-signalr';

export const configure = (configurator) => {
  enableSignalR(configurator, 'portal', {
    service: 'portal',
    path: '/signalr/hubs/service-message',
  });
};
```

### 自定义配置回调

为了完全控制,通过一个构建器回调:

```ts
import { enableSignalR } from '@equinor/fusion-framework-module-signalr';

export const configure = (configurator) => {
  enableSignalR(configurator, 'custom', (builder) => {
    builder.addHub('custom', {
      url: 'https://my-service.example.com/hub',
      options: {
        accessTokenFactory: () => getAccessToken(),
      },
      automaticReconnect: true,
    });
  });
};
```

## 订阅到中枢消息

模块初始化后使用 `ISignalRProvider.connect()` 获取 `Topic` - 一个RxJS `Observable` 绑入特定中枢方法:

```ts
const signalR = modules.signalR;
const topic = signalR.connect<MyMessage>('portal', 'OnServiceMessage');

const subscription = topic.subscribe((message) => {
  console.log('Received:', message);
});

// Unsubscribe when done — the hub connection is stopped automatically
// when the last subscriber unsubscribes.
subscription.unsubscribe();
```

## 发送信件

A 类 `Topic` 还揭露 `send()` (火灾和遗忘)和 `invoke()` 与服务器通信的(请求-答复):

```ts
// Fire-and-forget
topic.send('Hello from client');

// Request-response
const result = await topic.invoke<ServerResponse>('some argument');
```

## 关键概念

### 枢纽配置`SignalRHubConfig`(中文(简体) )

每个中枢连接由一个 `SignalRHubConfig`数字 :

| 财产 | 类型 | 说明 |
| --- | --- | --- |
| `url` | `string` | 信号中心端点的绝对 URL |
| `options` | `IHttpConnectionOptions` | 运输和认证选项(减去 `httpClient`(中文(简体) ) |
| `automaticReconnect` | `boolean` | 在断开时启用自动重接 |
| `logLevel` | `LogLevel` | 信号记录级别(默认为 `Critical`(中文(简体) ) |

### 连接生命周期

-   **懒惰的创作** ——枢纽连接在第一次订阅时创建.
-   **共享连接** 多个 `Topic` 同一枢纽的一个实例 `HubConnection` 通过 `shareReplay`。 。 。 .
-   **自动拆卸** ——当最后的订阅者不订阅时,连接被停止并被从内部缓存中移除.

### 操作遥测

当遥测模块可用时,提供者记录每个共享连接的 生命周期: `fusion.signalr.connect.duration`, (中文(简体) ), `fusion.signalr.reconnect.duration` 财务报告和审定财务报表 `fusion.signalr.disconnect.duration`,有一个消毒 `.failure` 失败者除外, (单位:千美元) `fusion.signalr.connection-lost` 当已建立的连接关闭时通知 没想到 当连接仍在启动时取消订阅是一个 `cancelled` 连接, 不是失败。 枢纽名称、URL、符号和信件从未被记录,连接和 重联行为不变.

### `Topic<T>`

`Topic` 扩展 RxJS `Observable<T>` 并包裹 `HubConnection` 方法倾听者。 它处理注册和自动取消对连接的回调.

## 出口

| 导出 | 仁爱 | 说明 |
| --- | --- | --- |
| `enableSignalR` | 函数 | 在一个呼叫中注册模块并配置中枢 |
| `module` 编号 : `default` | `SignalRModule` | 人工登记模块 |
| `moduleKey` | `'signalR'` | 模块注册密钥 |
| `SignalRModuleProvider` | 类 | 默认 `ISignalRProvider` 执行 |
| `SignalRConfigurator` | 类 | 默认 `ISignalRConfigurator` 执行 |
| `SignalRModuleConfigBuilder` | 类 | 动态中枢配置的构建器 |
| `Topic` | 类 | RxJS 软件 中枢方法的可观察包装 |
| `ISignalRProvider` | 接口 | 提供者接口 |
| `ISignalRConfigurator` | 接口 | 配置接口 |
| `SignalRConfig` | 类型 | 已解析配置 |
| `SignalRHubConfig` | 类型 | 单一枢纽配置 |
| `SignalRModuleConfigBuilderCallback` | 类型 | 构建器召回签名 |

## 常见问题

### 如何安装 @equinor/fusion-framework-module-signalr？

在项目目录运行 npm install @equinor/fusion-framework-module-signalr，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：@equinor/fusion-framework-module（^6\.2\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @equinor/fusion-framework-module-signalr 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @equinor/fusion-framework-module-signalr 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @equinor/fusion-framework-module-signalr 可以商用吗？

@equinor/fusion-framework-module-signalr 使用 ISC 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @equinor/fusion-framework-module-signalr 的下载量有多少？

根据 npm 官方下载统计，@equinor/fusion-framework-module-signalr 在 2026/10/14 – 2026/11/12 这 30 天内被下载 2,740 次，日均约 91 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @equinor/fusion-framework-module-signalr 还在维护吗？

最新版本 14\.1\.0 发布于 2026/11/12（1 天前）；至今共发布 122 个版本，其中过去 12 个月发布了 22 个；首次发布于 2023/01/26。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

