ppo*_*zos 7 c# asp.net redis signalr
假设我们有2个Redis服务器背板,一个作为Master,另一个作为Slave.
每个Web应用程序都使用SignalR,以便在发生时将内容推送到连接的客户端,并将它们连接到我在Application_Start中使用的背板
GlobalHost.DependencyResolver.UseRedis(host, port, "", new[] {"signalr.key"});
RouteTable.Routes.MapHubs();
Run Code Online (Sandbox Code Playgroud)
如果Master Redis Backplane出现故障,我想将Slave Redis服务器升级为Master并将所有现有连接从Web服务器切换到新的Master Redis服务器.
为了将Slave Server提升为Master,我使用以下代码
using (var conn = new RedisConnection(host, port, allowAdmin: true))
{
if (conn.ServerType != ServerType.Master)
{
conn.Open();
var makeMaster = conn.Server.MakeMaster();
var info = conn.Wait(conn.GetInfo());
conn.Wait(makeMaster);
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎做了工作.
您能否告诉我如何通知我的Web应用程序背板已经改变了如何连接到新的背板,以便维持我连接的客户端之间的通信?
我们没有专门使用 SignalR ,但我们使用 redis 的方式非常相似,特别是在节点之间切换时。具体来说,我们使用redis pub/sub订阅一个频道,并在更改master时向该频道广播。
我们的配置有点不同,因为我们使用基于ConnectionUtils.Connect(...). 这意味着我们可以指定多个节点,并ConnectionUtils处理确定哪个是当前主节点的问题。但就您而言,您也许可以将新的主信息作为发布/订阅的一部分发布。我还应该注意到,处理切换主机(带有通知)的大部分代码都包含在ConnectionUtils.SwitchMaster. 这包括更改的广播,您可以通过 订阅ConnectionUtils.SubscribeToMasterSwitch。作为一个次要的实现细节,它使用的通道是"__Booksleeve_MasterChanged"- 但如果您只使用公共方法,那么这是不透明的。