0

我在學習反應式編程,第一印象是它與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

回答

3

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