将Redis与SignalR一起使用

迷宫

我有一个在服务器A上运行的ASP.NET MVC应用程序,以及在服务器B上运行的某些Web服务。我已经在服务器A上使用SignalR实现了实时通知。但是现在我还需要服务器B才能将消息发送到由服务器A(主Web应用程序)提供服务的View。因此,我想教程这里涉及到Redis的背板。

在服务器A的启动中,添加了以下内容:

GlobalHost.DependencyResolver.UseRedis("localhost", 6379, string.Empty, "abc");
app.MapHubs();

在这里,我假设“ myApp”指示通道,当我publish abc "hello world"在Redis控制台上运行时,可以看到返回的订阅者计数为1,但是我无法弄清SignalR集线器如何与通道交互。我在哪里从服务器/视图中收到消息?我们只能订阅一个Redis频道吗?我们不能动态配置为订阅特定频道吗?

编辑:如果我订阅,我可以看到从使用Redis控制台上的SignalR实现的聊天应用程序发送的消息abc

同样,现在我已经在服务器A上实现了自己的Redis侦听器,该服务器在从Redis通道接收消息时调用signalR集线器功能。我确信必须有其他方法可以做到这一点,我希望Redis背板可以帮助我,但不确定其工作原理。

尔坎·德米雷尔

背板在服务器之间分发消息。

GlobalHost.DependencyResolver.UseRedis("localhost", 6379, string.Empty, "abc");

在这里,abc是redis通道,这意味着无论哪个服务器通过此通道连接到redis服务器,它们都将共享消息。SignalR通道(组)与Redis通道不同。您也可以共享SignalR频道(组)消息。

然后只需将Microsoft.AspNet.SignalR.Redis NuGet安装到您的服务器。

像这样将服务器连接到Redis:

 GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName");
 app.MapSignalR();

然后,像以前一样使用信号器。您无需执行其他任何操作。

当服务器A向客户端发送消息时,它将首先将该消息发送给Redis。然后,Redis将与所有订户(服务器A和B)共享消息。然后,A和B将邮件发送给他们的客户。(反之亦然,对于B发送消息也是如此)。

假设A向客户发送了一条消息。 _context.Clients.All.TestMessage("Hello");

这将首先进入redis,redis将与A和B分享。

然后,A和B都会将此消息发送给他们的客户。

_context.Clients.All.TestMessage("Hello");

但是您不必担心这类事情。我说过 安装软件包,连接服务器以进行重新部署,并像以前一样使用Signalr。

如果我们有您的问题。答案是肯定的。服务器B可以通过Signalr背板向服务器A客户端发送消息。

此图总结了我告诉的内容:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章