1

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

打字稿客户端(也是 1.0.4)被迫仅使用 websockets 连接,并从该通道流式传输数据。

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

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

通过 hubs.html 的常规 websocket 连接在跨实例广播数据时没有问题。streaming.html 不会为可观察或通道阅读器复制数据。

频道阅读器是否打算以这种方式使用,即它们可以横向扩展吗?

4

1 回答 1

0

ChannelReaders 旨在将数据流式传输到方法的调用者。他们根本不参与横向扩展。将它们视为与标准返回值相同,SignalR 仅支持随着时间的推移从它们中枚举项目。编程模型非常类似于迭代器在 C# 中的工作方式(使用yield关键字的方法)。如果您想向其他客户端广播消息,您应该只使用基类Clients上的属性并将消息发送给这些客户端。Hub

于 2018-10-29T18:20:49.307 回答