我是SignalR和Redis的新手。我有一个ASP.NET Core SignalR应用程序,我正在尝试就将Redis扩展为背板时进行概念验证,如下所述:https://docs.microsoft.com/en-us/aspnet/core/signalr/scale?view=aspnetcore-2.2#redis-backplane
为了进行小规模测试,我创建了演示信号SignalR聊天应用程序的两个独立项目,如下所述:https://docs.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://docs.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背板应该如何工作?
答案 0 :(得分:0)
项目名称应相同。 redis将项目名称添加到通道名称中。因为不同的项目名称在不同的频道上,所以它们无法发送消息。