我有一台Java服务器执行一些工作并在Redis上发布其结果。我想将这些结果实时发送给一些用户;所以我实施了一个基于SignalR的解决方案。结果必须为许多客户提供,而SignalR只是其中之一;因此无法修改服务器以完全符合我的要求。基本上,这就是我所拥有的:
服务器 - > Redis - > SignalR - >浏览器
我认为这是一个丑陋的解决方案,因为它使用Lazy类型来监听订阅的频道并调用委托来告诉SignalR推送数据。最好的解决方案是将数据直接从服务器推送到信号器,但我无法改变服务器发布结果的方式。我想到了一个可执行程序,它可以作为Redis和Signalr之间的桥梁,但它看起来更加难看:(
还有另一种让SignalR收听Redis频道的方法吗?
答案 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管道。
希望这有帮助!
祝你好运!