【发布时间】:2014-05-30 14:14:05
【问题描述】:
假设我有一个IObservable<Something> 服务器端,存储在静态字段或其他任何内容中。
我们还假设我有一个具有 Subscribe 方法的 SignalR 集线器和一个具有 notify 函数的 signalR 客户端。
public static IObservable<string> Events;
protected void Application_Start()
{
//dummy observable just to generate events for me..
Events = Observable
.Timer(TimeSpan.Zero, TimeSpan.FromMilliseconds(50))
.Select(l => l.ToString());
...snip..
}
和:
public class MyHub1 : Hub
{
public void Subscribe()
{
Clients.All.notify("start");
WebApiApplication.Events
.Subscribe(s => Clients.Caller.notify(s));
}
}
和:
myHub.client.notify = function (event) {
console.info(event);
};
我需要做什么才能让所有客户端共享可观察对象? 也就是说,我希望每个连接的客户端在订阅后都能接收到最后 200 个事件。然后每个客户端都应该实时看到相同的事件。
我想应该以某种方式使用 IObservable 的 Replay 方法。
我希望它的行为类似于聊天,用户可以实时查看最后 x 条消息 + 每个新事件。
除了如何实际编写可观察查询之外,在 Asp.NET 中存储和设置共享事件流的最佳方式是什么?
【问题讨论】:
标签: c# asp.net signalr system.reactive