2015-11-27 119 views
1

我有一個Java服務器執行一些工作並在Redis上發佈其結果。我想將這些結果實時發送給某些用戶;所以我實施了基於SignalR的解決方案。結果必須爲許多客戶提供,而SignalR只是其中之一;所以服務器不能被修改以適合我想要的。基本上,這裏是我有:如何讓SignalR訂閱Redis頻道?

服務器 - > Redis的 - > SignalR - >瀏覽器

我認爲這是一個醜陋的解決方案,因爲它採用的是懶惰型收聽訂閱的頻道,並調用一個委託告訴SignalR推送數據。最好的解決方案是將數據直接從服務器推送到signalr,但我無法改變服務器發佈結果的方式。我想到了一個可執行文件充當的Redis和Signalr之間的橋樑,但似乎更加難看:(

是否有另一種方式讓SignalR聽Redis的通道?

回答

1

最簡單的方法是使用Microsoft.AspNet.SignalR.Redis 。庫由微軟提供

的配置是最小的所有你需要做的是:

public class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      // Any connection or hub wire up and configuration should go here 
      GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName"); 
      app.MapSignalR(); 
     } 
    } 

Here is the link to the documentation.

基本上,它所做的是在你將要使用的Redis實例上創建一個pub/sub頻道。 (請注意,如果Redis實例是羣集的一部分!它將在所有實例之間反彈的消息,導致客戶端接收成千上萬的消息!)

在引擎蓋下,它將取代標準Message Bus SignalR與消息總線的實現將消息放入Redis管道中。

希望這會有所幫助!

祝你好運!

+0

這是一個SignalR擴展,這不是我的實際問題;我所說的服務器是與其他客戶端通信的Java服務器,而SignalR只是其中之一;所以無法修改服務器以完全符合SignalR。我會盡量讓我的問題更清楚。 – gobes