Rx与ASP.NET MVC中的SignalR

Rx与ASP.NET MVC中的SignalR

问题描述:

我在学习反应式编程,第一印象是它与SignalR(都使用push)相似。然而,后来我了解到这种差异,Rx如何​​不关心“如何”,而只关心“什么”。因此,我想实现我使用Rx和SignalR学到的东西。我创建了一个简单的拍卖MVC网络应用程序,使用SignalR以最新价格和剩余时间更新出价人。Rx与ASP.NET MVC中的SignalR

,我尝试使用RX是如下实施的情景:

  1. 客户点击出价按钮。
  2. SignalR集线器接收竞标请求 并将更新的价格传播给所有客户端。剩下的时间增加了。
  3. 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上吗?

我真的很感谢你的帮助,或者如果你能指导我讨论这种情况的好资源。

+0

Rx主要是关于事件和类事件数据源的组成。如果我理解正确,SignalR是一种实时向网页发送数据和从网页发送数据的方式。这两种技术做了不同的事情,但应该能够一起使用。 Rx非常强大,它是我处理任何事件驱动的数据源的首选方式。 – Enigmativity

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更具生产力和效率。

+0

这可以通过使用'Rx.Observable.fromEvent'来完成吗? – supertopi