如何扩展SignalR ChannelReader?

时间:2018-10-29 07:44:17

标签: asp.net-core-signalr

我正在使用SignalR 1.0.4,并且具有一个集线器,该集线器返回根据extension的观察对象创建的ChannelReader。

一个打字机客户端(也是1.0.4)只能使用websockets进行连接,并且可以很好地通过此通道传输数据。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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