@ equinor/ 组合- 框架- 模块- 符号
实时通信的融合框架模块 信号R。 。 。 .
提供基于RxJS的API,用于连接到信号R中枢,订阅服务器侧面方法,并发送消息回服务器. 枢机连接在所有订阅者不订阅时都会被计算出参考数并自动停止.
何时使用
当您的聚合应用程序需要时使用此模块:
- 从后端服务接收实时推取通知
- 通过信号R中枢订阅服务器发送事件
- 向信号R中枢方法发送消息
安装
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和访问符自动解决:
import { enableSignalR } from '@equinor/fusion-framework-module-signalr';
export const configure = (configurator) => {
enableSignalR(configurator, 'portal', {
service: 'portal',
path: '/signalr/hubs/service-message',
});
};
自定义配置回调
为了完全控制,通过一个构建器回调:
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 绑入特定中枢方法:
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() 与服务器通信的(请求-答复):
// 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 | 类型 | 构建器召回签名 |