2015-11-27 89 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