如何横向扩展 SignalR ChannelReader?

问题描述 投票:0回答:1

我正在使用 SignalR 1.0.4,并且有一个集线器,它返回一个由 扩展从可观察对象创建的 ChannelReader。

Typescript 客户端(也是 1.0.4)被迫仅使用 Websocket 进行连接,并且可以很好地从该通道传输数据。

现在我正在使用集线器的 2 个实例测试横向扩展,两个实例都使用相同的 Redis 连接。我在两个实例上从通道的可观察值发出值,但客户端似乎只从它所连接的实例接收数据。我的结论是频道阅读器数据不会通过Redis广播到其他频道。

我尝试使用 SignalRSamples 复制该项目,并为副本提供不同的主机 IP 来模拟 2 个负载平衡实例。我向这两个项目添加相同的 Redis 连接并启动它们。

通过 hubs.html 进行的常规 Websocket 连接在跨实例广播数据时没有问题。 Streaming.html 不会复制可观察或通道读取器的数据。

通道读取器是否应该以这种方式使用,即它们可以横向扩展吗?

c# asp.net-core-signalr system.threading.channels
1个回答
0
投票

ChannelReaders 旨在将数据流式传输到方法的 caller。他们根本不参与横向扩展。将它们视为与标准返回值相同,SignalR 仅支持随着时间的推移枚举它们的项目。编程模型与 C# 中迭代器的工作方式非常相似(使用

yield
关键字的方法)。如果您想向其他客户端广播消息,您应该只使用
Clients
基类上的
Hub
属性并向这些客户端发送消息。

© www.soinside.com 2019 - 2024. All rights reserved.