如何让SignalR订阅Redis频道?

时间:2015-11-27 07:59:30

标签: .net redis signalr

我有一台Java服务器执行一些工作并在Redis上发布其结果。我想将这些结果实时发送给一些用户;所以我实施了一个基于SignalR的解决方案。结果必须为许多客户提供,而SignalR只是其中之一;因此无法修改服务器以完全符合我的要求。基本上,这就是我所拥有的:

服务器 - > Redis - > SignalR - >浏览器

我认为这是一个丑陋的解决方案,因为它使用Lazy类型来监听订阅的频道并调用委托来告诉SignalR推送数据。最好的解决方案是将数据直接从服务器推送到信号器,但我无法改变服务器发布结果的方式。我想到了一个可执行程序,它可以作为Redis和Signalr之间的桥梁,但它看起来更加难看:(

还有另一种让SignalR收听Redis频道的方法吗?

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用Microsoft提供的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实例是群集的一部分,请小心!它将在所有实例之间反弹的消息,导致客户端收到数以万计的消息!)

在幕后,它将用Signal Bus的实现替换SignalR的标准消息总线,消息总线将消息放入Redis管道。

希望这有帮助!

祝你好运!