.net - 如何让 SignalR 订阅 Redis channel ?

标签 .net redis signalr

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

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

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

还有其他方法可以让 SignalR 监听 Redis channel 吗?

最佳答案

最简单的方法是使用 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 实例上创建一个发布/订阅 channel 。 (如果 Redis 实例是集群的一部分,请小心!它会在所有实例之间反弹消息,导致客户端收到数万条消息!)

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

希望这对您有所帮助!

祝你好运!

关于.net - 如何让 SignalR 订阅 Redis channel ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33952717/

相关文章:

c# - 如何使用自定义卸载程序卸载 Windows 服务

redis - 如何扩展 Redis?

azure - 如何在Azure函数应用程序中使用SignalR?

SignalR 从客户端方法返回值

sql-server - 使用 SQL Server 扩展 SignalR - 我们多久可以清除一次数据?

.net - nHibernate ShowSql对实时系统有影响吗?

.net - 如何知道 System.Data.Sqlite 对象何时/什么异常被抛出?

c# - 设计模式 : Which one to choose?

json - Yesod:如何将 Redis 结果作为 JSON 发送

redis 拒绝启动