如何横向扩展 SignalR ChannelReader?

How to scale out a SignalR ChannelReader?

我正在使用 SignalR 1.0.4 并有一个集线器,returns 从 extension.

的可观察对象创建的 ChannelReader

typescript 客户端(也是 1.0.4)被迫仅使用 websockets 连接,并从该通道正常传输数据。

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

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

通过 hubs.html 的常规 websocket 连接在跨实例广播数据时没有问题。 streaming.html 不会复制 observable 或通道 reader 的数据。

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

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