Rx与ASP.NET MVC中的SignalR
我在学习反应式编程,第一印象是它与SignalR(都使用push)相似。然而,后来我了解到这种差异,Rx如何不关心“如何”,而只关心“什么”。因此,我想实现我使用Rx和SignalR学到的东西。我创建了一个简单的拍卖MVC网络应用程序,使用SignalR以最新价格和剩余时间更新出价人。Rx与ASP.NET MVC中的SignalR
,我尝试使用RX是如下实施的情景:
- 客户点击出价按钮。
- SignalR集线器接收竞标请求 并将更新的价格传播给所有客户端。剩下的时间增加了。
- SignalR集线器发送更新的剩余时间每秒。
所以这里我们有两个事件源。 投标人点击投标按钮,SignalR每秒更新投标人的剩余时间。
我不知道SignalR更新客户与最新的出价价格被认为是可以在Rx中实施的事件。 是吗?
基于以上,我们有两个观测(按钮和SignalR枢纽定时器) 基于安德烈Staltz在教程“的出台,对反应式编程,你已经失踪” [1]我可以想像和理解按钮的点击流。但是,我遇到了定时器流的问题,我认为应该使用Observable.Interval
来实现。因此,现在我需要RxJS在客户端传输按钮点击,其中SignalR hub将成为观察者,同时,我需要在SignalR hub中使用Rx.NET,以便将剩余时间事件传输到连接的客户端谁将成为观察员。 我看着李坎贝尔tutorial和他使用SignalR与Rx.NET反应交易员,但因为它的先进我没有详细研究,但我发现在CodeProject [2]一个简化版本由萨沙·巴伯和答案吉姆 - 伍利[3]
但是,我无法理解如何实现我的观点,观察者是观察者,反之亦然。 SignalR和Rx之间的界限是什么?我知道他们每个人都做了什么,但是如何在上面的示例中构建被动方法,我应该在调用Observalbe.Interval
时调用更新剩余时间的javascript函数? 如果是这样,Rx的价值是什么? SignalR集线器正在每个连接的客户端调用更新功能,而不需要Rx。由于一切都是流,我应该把所有东西都转移到Rx上吗?
我真的很感谢你的帮助,或者如果你能指导我讨论这种情况的好资源。
SignalR前端客户端API基于回调模式,这是在javascript中进行异步编程最基本的方法。您可以使用任何您喜欢的异步模式(如Promise,Rxjs)在此基础上进行构建。还有,讨论了如何包装客户端侧通信与Rxjs approach- https://blog.sstorie.com/integrating-angular-2-and-signalr-part-2-of-2/
我首先建议入手回调格局,并有一个工作的应用程序设置,然后慢慢地挖成通信
转换回调的Rxjs方式的文章到Rxjs是相当容易的像下面
var onMessage$ = new Subject()
var connection = $.hubConnection();
var myHub = connection.createHubProxy('myHub');
myHub.on('message', function(message) {
onMessage$.next(message)
});
onMessage$.subscribe((message)=>console.log(message))
,但写在功能反应式的一切都将花费大量的精力和时间来练习。一旦你更熟悉了,在我看来,与承诺和回调相比,rxjs更具生产力和效率。
这可以通过使用'Rx.Observable.fromEvent'来完成吗? – supertopi
Rx主要是关于事件和类事件数据源的组成。如果我理解正确,SignalR是一种实时向网页发送数据和从网页发送数据的方式。这两种技术做了不同的事情,但应该能够一起使用。 Rx非常强大,它是我处理任何事件驱动的数据源的首选方式。 – Enigmativity