asp.net-core-signalr - 带有 Redis 背板的 SignalR;我究竟做错了什么?

标签 asp.net-core-signalr signalr-backplane

我是 SignalR 和 Redis 的新手。我有一个 ASP.NET Core SignalR 应用程序,我正在尝试对在横向扩展时使用 Redis 作为背板进行概念验证,如下所述:https://learn.microsoft.com/en-us/aspnet/core/signalr/scale?view=aspnetcore-2.2#redis-backplane

为了在小规模上进行测试,我创建了两个独立的演示 SignalR 聊天应用程序项目:https://learn.microsoft.com/en-us/aspnet/core/tutorials/signalr?view=aspnetcore-2.2&tabs=visual-studio

我打开了每个演示应用的两个实例(客户端),并验证了每个实例在其自己的客户端之间来回发送消息。

pre-Redis screenshot, 2 working demo apps

接下来,我使用此处找到的 Windows MSI 文件的 3.0.504 版安装了本地 Redis 数据库:https://github.com/microsoftarchive/redis/releases

使用 redis-cli.exe,我看到我可以连接到本地 Redis 实例:

127.0.0.1:6379> CLIENT SETNAME 'MyLocalConnection'
OK
127.0.0.1:6379> CLIENT LIST
id=22 addr=127.0.0.1:57283 fd=9 name=MyLocalConnection age=158 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client

接下来,我根据以下说明更新了我的两个演示应用程序:https://learn.microsoft.com/en-us/aspnet/core/signalr/redis-backplane?view=aspnetcore-2.2

我安装了 NuGet 包 Microsoft.AspNetCore.SignalR.StackExchangeRedis v1.1.5,并更新了 startup.cs 文件:

//services.AddSignalR();
services.AddSignalR().AddStackExchangeRedis("localhost");

我启动了这两个应用程序,并使用 redis-cli.exe,我验证了两者似乎都连接正确:

127.0.0.1:6379> CLIENT LIST
id=29 addr=127.0.0.1:53692 fd=13 name=DESKTOP-ALLBLN9 age=11 idle=10 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=get
id=30 addr=127.0.0.1:53693 fd=11 name=DESKTOP-ALLBLN9 age=11 idle=9 flags=N db=0 sub=5 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=subscribe
id=31 addr=127.0.0.1:53695 fd=10 name= age=10 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
id=32 addr=127.0.0.1:53696 fd=9 name=DESKTOP-ALLBLN9 age=10 idle=9 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=get
id=33 addr=127.0.0.1:53697 fd=12 name=DESKTOP-ALLBLN9 age=10 idle=8 flags=N db=0 sub=5 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=subscribe
127.0.0.1:6379>

此时,我再次为每个应用打开两个客户端,期望任何一个发送的消息都能到达所有四个客户端。但是,它仍然只到达该特定应用的两个客户端。

After Redis added, clients still only talk to their own app

有人可以帮助我理解我的错误是什么吗?是否需要添加更多内容才能让两个应用程序相互“看到”?还是我误解了 Redis 背板应该如何工作?

最佳答案

项目的名称应该相同。 redis 将项目名称添加到 channel 名称。因为不同的项目名称在不同的 channel ,所以不能留言。

关于asp.net-core-signalr - 带有 Redis 背板的 SignalR;我究竟做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56782911/

相关文章:

asp.net-mvc - Asp.net SignalR 在 Azure 中部署时无法工作

azure - 如何从Web应用程序服务调用SignalR服务方法

asp.net-core - 是否可以使用 Core SignalR 进行音频或视频通信

sql - 是否可以将 SignalR 消息直接添加到 SQL 背板?

SignalR 背板

c# - SignalR Redis 背板不工作 - 依赖性问题?

reactjs - React .NET - 使用signalR获取所有事件连接的数量

azure - 在服务器上测试 Azure SignalR 连接

c# - SignalR,如何验证连接 ID 是否仍处于事件状态?

azure - 为什么使用 SignalR 无法很好地扩展消息传递时间?