gpt4 book ai didi

c# - 将 Redis 与 SignalR 结合使用

转载 作者:IT王子 更新时间:2023-10-29 04:53:11 25 4
gpt4 key购买 nike

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

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

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

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

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

另外,现在我已经在服务器 A 上实现了我自己的 redis 监听器,它在从 redis channel 接收消息时调用 signalR 集线器函数。我确信一定有不同的方法可以做到这一点,我希望 redis 背板可以帮助我,但不确定它是如何工作的。

最佳答案

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

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

这里,abc是redis的 channel ,也就是说无论哪个服务器通过这个 channel 连接到redis服务器,都会共享消息。 SignalR channel (组)不同于 Redis channel 。您还可以共享 SignalR channel (组)消息。

然后只需安装 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");

但是您不必担心这些事情。我之前说过。安装包,将您的服务器连接到 redis 并像以前一样使用 signalr。

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

这张图片总结了我所说的:

enter image description here

关于c# - 将 Redis 与 SignalR 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36161600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com