在我们的客户端应用程序中,我们通过SignalR.Client发送和接收实时事件。从服务器订阅事件是通过SignalR完成的。在大多数情况下,订阅事件通过SignalR客户端发送到SignalR集线器,然后使用反应性扩展,应用程序中响应这种事件的部分订阅了适当的IObservable。
然而,我们现在有几个例子,相同的可观测的共享多个观察者。处理可观察到的每个内部订阅进行得很好,但是在释放最后一个观察者之后,我想取消订阅,不接收服务器上的给定事件。我考虑过只对所有这些订阅使用单独的连接,但是在这个特定的网络环境中,在连接激活之前会有相当大的延迟。
例如,客户端应用程序的组件A、B和C都希望附加到从服务器接收到的SomeEvent。一旦它们中的任何一个被激活,如果它是第一个这样做的,应用程序应该订阅远程SignalR集线器上的事件。当其中任何一个变为活动时,它应该使用Rx在内部订阅我们已经实现的可观察集合中的相关可观测集合(如果还不存在,则添加一个)。当A、B或C变成非活动时,它显然应该释放它的IDisposable订阅。如果它是剩下的最后一个服务器,它也应该从SignalR集线器服务器中取消订阅。
Tl;dr:我想做一个托管取消订阅,看看离开的观察者是否是服务器中心上的最后一个也是唯一的取消订阅点。是否有一种有效的方法来计算IObservable的“活”观察者的数量?或者是一种更好的方法来实现所有这些?非常感谢!
发布于 2013-04-18 00:26:08
.Publish().RefCount()所做的正是您所描述的。只需确保每次订阅都使用相同的可观察性,否则引用计数将无法工作。
https://stackoverflow.com/questions/16065121
复制相似问题