Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Andrew Stanton-Nurse, Brady Gaster a Tom Dykstra.
Tento článek vysvětluje SignalRkonkrétní aspekty nastavení serveru Redis pro horizontální navýšení kapacity aplikace ASP.NET Core SignalR .
Varování
Tento článek ukazuje použití připojovací řetězec. U místní databáze nemusí být uživatel ověřený, ale v produkčním prostředí připojovací řetězec někdy obsahují heslo k ověření. Přihlašovací údaje vlastníka prostředku (ROPC) jsou bezpečnostní riziko, kterému byste se měli vyhnout v produkčních databázích. Produkční aplikace by měly používat nejbezpečnější dostupný tok ověřování. Další informace o ověřování pro aplikace nasazené do testovacího nebo produkčního prostředí najdete v tématu Zabezpečené toky ověřování.
Nastavte Redis backplane
Nasazení serveru Redis
Důležité
Pro produkční použití se Redis backplane doporučuje pouze tehdy, když běží ve stejném datovém centru jako aplikace SignalR. Jinak latence sítě snižuje výkon. Pokud je vaše SignalR aplikace spuštěná v cloudu Azure, místo backplane Redis doporučujeme službu Azure SignalR .
Další informace naleznete v následujících zdrojích:
SignalR V aplikaci nainstalujte následující balíček NuGet:
Microsoft.AspNetCore.SignalR.StackExchangeRedis
Před řádkem, který volá AddStackExchangeRedis, přidejte v souboru
builder.Build()následující řádek volajícíProgram.cs.builder.Services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");Podle potřeby nakonfigurujte možnosti:
Většinu možností lze nastavit v připojovacím řetězci nebo v objektu
ConfigurationOptions. Možnosti zadané vConfigurationOptionspřepisují ty, které jsou nastaveny v připojovacím řetězci.Následující příklad ukazuje, jak nastavit možnosti v objektu
ConfigurationOptions. Tento příklad přidá předponu kanálu, aby více aplikací mohly sdílet stejnou instanci Redis, jak je vysvětleno v následujícím kroku.builder.Services.AddSignalR() .AddStackExchangeRedis(connectionString, options => { options.Configuration.ChannelPrefix = RedisChannel.Literal("MyApp"); });V předchozím kódu se
options.Configurationinicializuje tím, co bylo zadáno v připojovacím řetězci.Informace o možnostech Redis naleznete v dokumentaci k StackExchange Redis.
Pokud používáte jeden server Redis pro více SignalR aplikací, použijte pro každou SignalR aplikaci jinou předponu kanálu.
Nastavení předpony kanálu izoluje jednu SignalR aplikaci od ostatních, které používají různé předpony kanálu. Pokud nepřiřazujete různé předpony, zpráva odeslaná z jedné aplikace všem svým vlastním klientům přejde na všechny klienty všech aplikací, které používají server Redis jako backplane.
Nakonfigurujte software pro vyrovnávání zatížení serverové farmy pro trvalé relace. Tady je několik příkladů dokumentace, jak to udělat:
Chyby serveru Redis
Když server Redis přestane fungovat, SignalR vyvolá výjimky, které indikují, že zprávy se nedoručí. Některé typické zprávy o výjimce:
- Zpráva o neúspěšném zápisu
- Volání metody Hub MethodName se nezdařilo.
- Připojení k Redis se nezdařilo
SignalR nezaznamenává zprávy do vyrovnávací paměti, aby je odeslal, když se server znovu spustí. Všechny zprávy odeslané během výpadku serveru Redis budou ztraceny.
SignalR automaticky se znovu připojí, jakmile bude server Redis znovu k dispozici.
Specifické chování při selhání připojení
Tady je příklad, který ukazuje, jak zpracovat události selhání připojení Redis.
services.AddSignalR()
.AddMessagePackProtocol()
.AddStackExchangeRedis(o =>
{
o.ConnectionFactory = async writer =>
{
var config = new ConfigurationOptions
{
AbortOnConnectFail = false
};
config.EndPoints.Add(IPAddress.Loopback, 0);
config.SetDefaultPorts();
var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
connection.ConnectionFailed += (_, e) =>
{
Console.WriteLine("Connection to Redis failed.");
};
if (!connection.IsConnected)
{
Console.WriteLine("Did not connect to Redis.");
}
return connection;
};
});
Redis klastr
Cluster Redis využívá k zajištění vysoké dostupnosti několik současně aktivních serverů Redis. Když se redis Cluster použije jako backplane pro SignalR, zprávy se doručí do všech uzlů clusteru bez úprav kódu aplikace.
Mezi počtem uzlů v clusteru a propustností backplanu existuje kompromis. Zvýšení počtu uzlů zvyšuje dostupnost clusteru, ale snižuje propustnost, protože zprávy se musí přenášet do všech uzlů v clusteru.
SignalR V aplikaci zahrňte všechny možné uzly Redis pomocí některého z následujících přístupů:
- Vypište uzly v připojovacím řetězci oddělené čárkami.
- Pokud používáte vlastní chování pro selhání připojení, přidejte uzly do
ConfigurationOptions.Endpoints.
Další kroky
Další informace naleznete v následujících zdrojích:
Tento článek vysvětluje SignalRkonkrétní aspekty nastavení serveru Redis pro horizontální navýšení kapacity aplikace ASP.NET Core SignalR .
Varování
Tento článek ukazuje použití připojovací řetězec. U místní databáze nemusí být uživatel ověřený, ale v produkčním prostředí připojovací řetězec někdy obsahují heslo k ověření. Přihlašovací údaje vlastníka prostředku (ROPC) jsou bezpečnostní riziko, kterému byste se měli vyhnout v produkčních databázích. Produkční aplikace by měly používat nejbezpečnější dostupný tok ověřování. Další informace o ověřování pro aplikace nasazené do testovacího nebo produkčního prostředí najdete v tématu Zabezpečené toky ověřování.
Nastavte Redis backplane
Nasazení serveru Redis
Důležité
Pro produkční použití se Redis backplane doporučuje pouze tehdy, když běží ve stejném datovém centru jako aplikace SignalR. Jinak latence sítě snižuje výkon. Pokud je vaše SignalR aplikace spuštěná v cloudu Azure, místo backplane Redis doporučujeme službu Azure SignalR .
Další informace naleznete v následujících zdrojích:
SignalR V aplikaci nainstalujte následující balíček NuGet:
Microsoft.AspNetCore.SignalR.StackExchangeRedis
Před řádkem, který volá AddStackExchangeRedis, přidejte v souboru
builder.Build()následující řádek volajícíProgram.cs.builder.Services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");Podle potřeby nakonfigurujte možnosti:
Většinu možností lze nastavit v připojovacím řetězci nebo v objektu
ConfigurationOptions. Možnosti zadané vConfigurationOptionspřepisují ty, které jsou nastaveny v připojovacím řetězci.Následující příklad ukazuje, jak nastavit možnosti v objektu
ConfigurationOptions. Tento příklad přidá předponu kanálu, aby více aplikací mohly sdílet stejnou instanci Redis, jak je vysvětleno v následujícím kroku.services.AddSignalR() .AddStackExchangeRedis(connectionString, options => { options.Configuration.ChannelPrefix = "MyApp"; });V předchozím kódu se
options.Configurationinicializuje tím, co bylo zadáno v připojovacím řetězci.Informace o možnostech Redis naleznete v dokumentaci k StackExchange Redis.
Pokud používáte jeden server Redis pro více SignalR aplikací, použijte pro každou SignalR aplikaci jinou předponu kanálu.
Nastavení předpony kanálu izoluje jednu SignalR aplikaci od ostatních, které používají různé předpony kanálu. Pokud nepřiřazujete různé předpony, zpráva odeslaná z jedné aplikace všem svým vlastním klientům přejde na všechny klienty všech aplikací, které používají server Redis jako backplane.
Nakonfigurujte software pro vyrovnávání zatížení serverové farmy pro trvalé relace. Tady je několik příkladů dokumentace, jak to udělat:
Chyby serveru Redis
Když server Redis přestane fungovat, SignalR vyvolá výjimky, které indikují, že zprávy se nedoručí. Některé typické zprávy o výjimce:
- Zpráva o neúspěšném zápisu
- Volání metody Hub MethodName se nezdařilo.
- Připojení k Redis se nezdařilo
SignalR nezaznamenává zprávy do vyrovnávací paměti, aby je odeslal, když se server znovu spustí. Všechny zprávy odeslané během výpadku serveru Redis budou ztraceny.
SignalR automaticky se znovu připojí, jakmile bude server Redis znovu k dispozici.
Specifické chování při selhání připojení
Tady je příklad, který ukazuje, jak zpracovat události selhání připojení Redis.
services.AddSignalR()
.AddMessagePackProtocol()
.AddStackExchangeRedis(o =>
{
o.ConnectionFactory = async writer =>
{
var config = new ConfigurationOptions
{
AbortOnConnectFail = false
};
config.EndPoints.Add(IPAddress.Loopback, 0);
config.SetDefaultPorts();
var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
connection.ConnectionFailed += (_, e) =>
{
Console.WriteLine("Connection to Redis failed.");
};
if (!connection.IsConnected)
{
Console.WriteLine("Did not connect to Redis.");
}
return connection;
};
});
Redis klastr
Cluster Redis využívá k zajištění vysoké dostupnosti několik současně aktivních serverů Redis. Když se redis Cluster použije jako backplane pro SignalR, zprávy se doručí do všech uzlů clusteru bez úprav kódu aplikace.
Mezi počtem uzlů v clusteru a propustností backplanu existuje kompromis. Zvýšení počtu uzlů zvyšuje dostupnost clusteru, ale snižuje propustnost, protože zprávy se musí přenášet do všech uzlů v clusteru.
SignalR V aplikaci zahrňte všechny možné uzly Redis pomocí některého z následujících přístupů:
- Vypište uzly v připojovacím řetězci oddělené čárkami.
- Pokud používáte vlastní chování pro selhání připojení, přidejte uzly do
ConfigurationOptions.Endpoints.
Další kroky
Další informace naleznete v následujících zdrojích:
Tento článek vysvětluje SignalRkonkrétní aspekty nastavení serveru Redis pro horizontální navýšení kapacity aplikace ASP.NET Core SignalR .
Varování
Tento článek ukazuje použití připojovací řetězec. U místní databáze nemusí být uživatel ověřený, ale v produkčním prostředí připojovací řetězec někdy obsahují heslo k ověření. Přihlašovací údaje vlastníka prostředku (ROPC) jsou bezpečnostní riziko, kterému byste se měli vyhnout v produkčních databázích. Produkční aplikace by měly používat nejbezpečnější dostupný tok ověřování. Další informace o ověřování pro aplikace nasazené do testovacího nebo produkčního prostředí najdete v tématu Zabezpečené toky ověřování.
Nastavte Redis backplane
Nasazení serveru Redis
Důležité
Pro produkční použití se Redis backplane doporučuje pouze tehdy, když běží ve stejném datovém centru jako aplikace SignalR. Jinak latence sítě snižuje výkon. Pokud je vaše SignalR aplikace spuštěná v cloudu Azure, místo backplane Redis doporučujeme službu Azure SignalR .
Další informace naleznete v následujících zdrojích:
SignalR V aplikaci nainstalujte následující balíček NuGet:
Microsoft.AspNetCore.SignalR.StackExchangeRedis
Před řádkem, který volá AddStackExchangeRedis, přidejte v souboru
builder.Build()následující řádek volajícíProgram.cs.builder.Services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");Podle potřeby nakonfigurujte možnosti:
Většinu možností lze nastavit v připojovacím řetězci nebo v objektu
ConfigurationOptions. Možnosti zadané vConfigurationOptionspřepisují ty, které jsou nastaveny v připojovacím řetězci.Následující příklad ukazuje, jak nastavit možnosti v objektu
ConfigurationOptions. Tento příklad přidá předponu kanálu, aby více aplikací mohly sdílet stejnou instanci Redis, jak je vysvětleno v následujícím kroku.builder.Services.AddSignalR() .AddStackExchangeRedis(connectionString, options => { options.Configuration.ChannelPrefix = RedisChannel.Literal("MyApp"); });V předchozím kódu se
options.Configurationinicializuje tím, co bylo zadáno v připojovacím řetězci.Informace o možnostech Redis naleznete v dokumentaci k StackExchange Redis.
Pokud používáte jeden server Redis pro více SignalR aplikací, použijte pro každou SignalR aplikaci jinou předponu kanálu.
Nastavení předpony kanálu izoluje jednu SignalR aplikaci od ostatních, které používají různé předpony kanálu. Pokud nepřiřazujete různé předpony, zpráva odeslaná z jedné aplikace všem svým vlastním klientům přejde na všechny klienty všech aplikací, které používají server Redis jako backplane.
Nakonfigurujte software pro vyrovnávání zatížení serverové farmy pro trvalé relace. Tady je několik příkladů dokumentace, jak to udělat:
Chyby serveru Redis
Když server Redis přestane fungovat, SignalR vyvolá výjimky, které indikují, že zprávy se nedoručí. Některé typické zprávy o výjimce:
- Zpráva o neúspěšném zápisu
- Volání metody Hub MethodName se nezdařilo.
- Připojení k Redis se nezdařilo
SignalR nezaznamenává zprávy do vyrovnávací paměti, aby je odeslal, když se server znovu spustí. Všechny zprávy odeslané během výpadku serveru Redis budou ztraceny.
SignalR automaticky se znovu připojí, jakmile bude server Redis znovu k dispozici.
Specifické chování při selhání připojení
Tady je příklad, který ukazuje, jak zpracovat události selhání připojení Redis.
services.AddSignalR()
.AddMessagePackProtocol()
.AddStackExchangeRedis(o =>
{
o.ConnectionFactory = async writer =>
{
var config = new ConfigurationOptions
{
AbortOnConnectFail = false
};
config.EndPoints.Add(IPAddress.Loopback, 0);
config.SetDefaultPorts();
var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
connection.ConnectionFailed += (_, e) =>
{
Console.WriteLine("Connection to Redis failed.");
};
if (!connection.IsConnected)
{
Console.WriteLine("Did not connect to Redis.");
}
return connection;
};
});
Redis klastr
Cluster Redis využívá k zajištění vysoké dostupnosti několik současně aktivních serverů Redis. Když se redis Cluster použije jako backplane pro SignalR, zprávy se doručí do všech uzlů clusteru bez úprav kódu aplikace.
Mezi počtem uzlů v clusteru a propustností backplanu existuje kompromis. Zvýšení počtu uzlů zvyšuje dostupnost clusteru, ale snižuje propustnost, protože zprávy se musí přenášet do všech uzlů v clusteru.
SignalR V aplikaci zahrňte všechny možné uzly Redis pomocí některého z následujících přístupů:
- Vypište uzly v připojovacím řetězci oddělené čárkami.
- Pokud používáte vlastní chování pro selhání připojení, přidejte uzly do
ConfigurationOptions.Endpoints.
Další kroky
Další informace naleznete v následujících zdrojích:
Tento článek vysvětluje SignalRkonkrétní aspekty nastavení serveru Redis pro horizontální navýšení kapacity aplikace ASP.NET Core SignalR .
Varování
Tento článek ukazuje použití připojovací řetězec. U místní databáze nemusí být uživatel ověřený, ale v produkčním prostředí připojovací řetězec někdy obsahují heslo k ověření. Přihlašovací údaje vlastníka prostředku (ROPC) jsou bezpečnostní riziko, kterému byste se měli vyhnout v produkčních databázích. Produkční aplikace by měly používat nejbezpečnější dostupný tok ověřování. Další informace o ověřování pro aplikace nasazené do testovacího nebo produkčního prostředí najdete v tématu Zabezpečené toky ověřování.
Nastavte Redis backplane
Nasazení serveru Redis
Důležité
Pro produkční použití se Redis backplane doporučuje pouze tehdy, když běží ve stejném datovém centru jako aplikace SignalR. Jinak latence sítě snižuje výkon. Pokud je vaše SignalR aplikace spuštěná v cloudu Azure, místo backplane Redis doporučujeme službu Azure SignalR .
Další informace naleznete v následujících zdrojích:
SignalR V aplikaci nainstalujte následující balíček NuGet:
Microsoft.AspNetCore.SignalR.StackExchangeRedis
Startup.ConfigureServicesV metodě volejteAddStackExchangeRedis:services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");Podle potřeby nakonfigurujte možnosti:
Většinu možností lze nastavit v připojovacím řetězci nebo v objektu
ConfigurationOptions. Možnosti zadané vConfigurationOptionspřepisují ty, které jsou nastaveny v připojovacím řetězci.Následující příklad ukazuje, jak nastavit možnosti v objektu
ConfigurationOptions. Tento příklad přidá předponu kanálu, aby více aplikací mohly sdílet stejnou instanci Redis, jak je vysvětleno v následujícím kroku.services.AddSignalR() .AddStackExchangeRedis(connectionString, options => { options.Configuration.ChannelPrefix = "MyApp"; });V předchozím kódu se
options.Configurationinicializuje tím, co bylo zadáno v připojovacím řetězci.Informace o možnostech Redis naleznete v dokumentaci k StackExchange Redis.
Pokud používáte jeden server Redis pro více SignalR aplikací, použijte pro každou SignalR aplikaci jinou předponu kanálu.
Nastavení předpony kanálu izoluje jednu SignalR aplikaci od ostatních, které používají různé předpony kanálu. Pokud nepřiřazujete různé předpony, zpráva odeslaná z jedné aplikace všem svým vlastním klientům přejde na všechny klienty všech aplikací, které používají server Redis jako backplane.
Nakonfigurujte software pro vyrovnávání zatížení serverové farmy pro trvalé relace. Tady je několik příkladů dokumentace, jak to udělat:
Chyby serveru Redis
Když server Redis přestane fungovat, SignalR vyvolá výjimky, které indikují, že zprávy se nedoručí. Některé typické zprávy o výjimce:
- Zpráva o neúspěšném zápisu
- Volání metody Hub MethodName se nezdařilo.
- Připojení k Redis se nezdařilo
SignalR nezaznamenává zprávy do vyrovnávací paměti, aby je odeslal, když se server znovu spustí. Všechny zprávy odeslané během výpadku serveru Redis budou ztraceny.
SignalR automaticky se znovu připojí, jakmile bude server Redis znovu k dispozici.
Specifické chování při selhání připojení
Tady je příklad, který ukazuje, jak zpracovat události selhání připojení Redis.
services.AddSignalR()
.AddMessagePackProtocol()
.AddStackExchangeRedis(o =>
{
o.ConnectionFactory = async writer =>
{
var config = new ConfigurationOptions
{
AbortOnConnectFail = false
};
config.EndPoints.Add(IPAddress.Loopback, 0);
config.SetDefaultPorts();
var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
connection.ConnectionFailed += (_, e) =>
{
Console.WriteLine("Connection to Redis failed.");
};
if (!connection.IsConnected)
{
Console.WriteLine("Did not connect to Redis.");
}
return connection;
};
});
Redis klastr
Cluster Redis využívá k zajištění vysoké dostupnosti několik současně aktivních serverů Redis. Když se redis Cluster použije jako backplane pro SignalR, zprávy se doručí do všech uzlů clusteru bez úprav kódu aplikace.
Mezi počtem uzlů v clusteru a propustností backplanu existuje kompromis. Zvýšení počtu uzlů zvyšuje dostupnost clusteru, ale snižuje propustnost, protože zprávy se musí přenášet do všech uzlů v clusteru.
SignalR V aplikaci zahrňte všechny možné uzly Redis pomocí některého z následujících přístupů:
- Vypište uzly v připojovacím řetězci oddělené čárkami.
- Pokud používáte vlastní chování pro selhání připojení, přidejte uzly do
ConfigurationOptions.Endpoints.
Další kroky
Další informace naleznete v následujících zdrojích:
Tento článek vysvětluje SignalRkonkrétní aspekty nastavení serveru Redis pro horizontální navýšení kapacity aplikace ASP.NET Core SignalR .
Varování
Tento článek ukazuje použití připojovací řetězec. U místní databáze nemusí být uživatel ověřený, ale v produkčním prostředí připojovací řetězec někdy obsahují heslo k ověření. Přihlašovací údaje vlastníka prostředku (ROPC) jsou bezpečnostní riziko, kterému byste se měli vyhnout v produkčních databázích. Produkční aplikace by měly používat nejbezpečnější dostupný tok ověřování. Další informace o ověřování pro aplikace nasazené do testovacího nebo produkčního prostředí najdete v tématu Zabezpečené toky ověřování.
Nastavte Redis backplane
Nasazení serveru Redis
Důležité
Pro produkční použití se Redis backplane doporučuje pouze tehdy, když běží ve stejném datovém centru jako aplikace SignalR. Jinak latence sítě snižuje výkon. Pokud je vaše SignalR aplikace spuštěná v cloudu Azure, místo backplane Redis doporučujeme službu Azure SignalR .
Další informace naleznete v následujících zdrojích:
SignalR V aplikaci nainstalujte následující balíček NuGet:
Microsoft.AspNetCore.SignalR.StackExchangeRedis
Startup.ConfigureServicesV metodě volejteAddStackExchangeRedis:services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");Podle potřeby nakonfigurujte možnosti:
Většinu možností lze nastavit v připojovacím řetězci nebo v objektu
ConfigurationOptions. Možnosti zadané vConfigurationOptionspřepisují ty, které jsou nastaveny v připojovacím řetězci.Následující příklad ukazuje, jak nastavit možnosti v objektu
ConfigurationOptions. Tento příklad přidá předponu kanálu, aby více aplikací mohly sdílet stejnou instanci Redis, jak je vysvětleno v následujícím kroku.services.AddSignalR() .AddStackExchangeRedis(connectionString, options => { options.Configuration.ChannelPrefix = "MyApp"; });V předchozím kódu se
options.Configurationinicializuje tím, co bylo zadáno v připojovacím řetězci.Informace o možnostech Redis naleznete v dokumentaci k StackExchange Redis.
Pokud používáte jeden server Redis pro více SignalR aplikací, použijte pro každou SignalR aplikaci jinou předponu kanálu.
Nastavení předpony kanálu izoluje jednu SignalR aplikaci od ostatních, které používají různé předpony kanálu. Pokud nepřiřazujete různé předpony, zpráva odeslaná z jedné aplikace všem svým vlastním klientům přejde na všechny klienty všech aplikací, které používají server Redis jako backplane.
Nakonfigurujte software pro vyrovnávání zatížení serverové farmy pro trvalé relace. Tady je několik příkladů dokumentace, jak to udělat:
Chyby serveru Redis
Když server Redis přestane fungovat, SignalR vyvolá výjimky, které indikují, že zprávy se nedoručí. Některé typické zprávy o výjimce:
- Zpráva o neúspěšném zápisu
- Volání metody Hub MethodName se nezdařilo.
- Připojení k Redis se nezdařilo
SignalR nezaznamenává zprávy do vyrovnávací paměti, aby je odeslal, když se server znovu spustí. Všechny zprávy odeslané během výpadku serveru Redis budou ztraceny.
SignalR automaticky se znovu připojí, jakmile bude server Redis znovu k dispozici.
Specifické chování při selhání připojení
Tady je příklad, který ukazuje, jak zpracovat události selhání připojení Redis.
services.AddSignalR()
.AddMessagePackProtocol()
.AddStackExchangeRedis(o =>
{
o.ConnectionFactory = async writer =>
{
var config = new ConfigurationOptions
{
AbortOnConnectFail = false
};
config.EndPoints.Add(IPAddress.Loopback, 0);
config.SetDefaultPorts();
var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
connection.ConnectionFailed += (_, e) =>
{
Console.WriteLine("Connection to Redis failed.");
};
if (!connection.IsConnected)
{
Console.WriteLine("Did not connect to Redis.");
}
return connection;
};
});
Redis klastr
Cluster Redis využívá k zajištění vysoké dostupnosti několik současně aktivních serverů Redis. Když se redis Cluster použije jako backplane pro SignalR, zprávy se doručí do všech uzlů clusteru bez úprav kódu aplikace.
Mezi počtem uzlů v clusteru a propustností backplanu existuje kompromis. Zvýšení počtu uzlů zvyšuje dostupnost clusteru, ale snižuje propustnost, protože zprávy se musí přenášet do všech uzlů v clusteru.
SignalR V aplikaci zahrňte všechny možné uzly Redis pomocí některého z následujících přístupů:
- Vypište uzly v připojovacím řetězci oddělené čárkami.
- Pokud používáte vlastní chování pro selhání připojení, přidejte uzly do
ConfigurationOptions.Endpoints.
Další kroky
Další informace naleznete v následujících zdrojích:
Tento článek vysvětluje SignalRkonkrétní aspekty nastavení serveru Redis pro horizontální navýšení kapacity aplikace ASP.NET Core SignalR .
Varování
Tento článek ukazuje použití připojovací řetězec. U místní databáze nemusí být uživatel ověřený, ale v produkčním prostředí připojovací řetězec někdy obsahují heslo k ověření. Přihlašovací údaje vlastníka prostředku (ROPC) jsou bezpečnostní riziko, kterému byste se měli vyhnout v produkčních databázích. Produkční aplikace by měly používat nejbezpečnější dostupný tok ověřování. Další informace o ověřování pro aplikace nasazené do testovacího nebo produkčního prostředí najdete v tématu Zabezpečené toky ověřování.
Nastavte Redis backplane
Nasazení serveru Redis
Důležité
Pro produkční použití se Redis backplane doporučuje pouze tehdy, když běží ve stejném datovém centru jako aplikace SignalR. Jinak latence sítě snižuje výkon. Pokud je vaše SignalR aplikace spuštěná v cloudu Azure, místo backplane Redis doporučujeme službu Azure SignalR .
Další informace naleznete v následujících zdrojích:
SignalR V aplikaci nainstalujte jeden z následujících balíčků NuGet:
-
Microsoft.AspNetCore.SignalR.StackExchangeRedis– Závisí na StackExchange.Redis 2.X.X. Toto je doporučený balíček pro ASP.NET Core 2.2 nebo novější. -
Microsoft.AspNetCore.SignalR.Redis– Závisí na StackExchange.Redis 1.X.X. Tento balíček není součástí ASP.NET Core 3.0 nebo novější.
-
Startup.ConfigureServicesV metodě volejteAddStackExchangeRedis:services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");
Při použití Microsoft.AspNetCore.SignalR.Redis volejte AddRedis.
Podle potřeby nakonfigurujte možnosti:
Většinu možností lze nastavit v připojovací řetězec nebo v objektu ConfigurationOptions. Možnosti zadané v
ConfigurationOptionspřepisují ty, které jsou nastaveny v připojovacím řetězci.Následující příklad ukazuje, jak nastavit možnosti v objektu
ConfigurationOptions. Tento příklad přidá předponu kanálu, aby více aplikací mohly sdílet stejnou instanci Redis, jak je vysvětleno v následujícím kroku.services.AddSignalR() .AddStackExchangeRedis(connectionString, options => { options.Configuration.ChannelPrefix = "MyApp"; });
Při použití Microsoft.AspNetCore.SignalR.Redis volejte AddRedis.
V předchozím kódu se options.Configuration inicializuje tím, co bylo zadáno v připojovacím řetězci.
Informace o možnostech Redis naleznete v dokumentaci k StackExchange Redis.
Pokud používáte jeden server Redis pro více SignalR aplikací, použijte pro každou SignalR aplikaci jinou předponu kanálu.
Nastavení předpony kanálu izoluje jednu SignalR aplikaci od ostatních, které používají různé předpony kanálu. Pokud nepřiřazujete různé předpony, zpráva odeslaná z jedné aplikace všem svým vlastním klientům přejde na všechny klienty všech aplikací, které používají server Redis jako backplane.
Nakonfigurujte software pro vyrovnávání zatížení serverové farmy pro trvalé relace. Tady je několik příkladů dokumentace, jak to udělat:
Chyby serveru Redis
Když server Redis přestane fungovat, SignalR vyvolá výjimky, které indikují, že zprávy se nedoručí. Některé typické zprávy o výjimce:
- Zpráva o neúspěšném zápisu
- Volání metody Hub MethodName se nezdařilo.
- Připojení k Redis se nezdařilo
SignalR nezaznamenává zprávy do vyrovnávací paměti, aby je odeslal, když se server znovu spustí. Všechny zprávy odeslané během výpadku serveru Redis budou ztraceny.
SignalR automaticky se znovu připojí, jakmile bude server Redis znovu k dispozici.
Specifické chování při selhání připojení
Tady je příklad, který ukazuje, jak zpracovat události selhání připojení Redis.
services.AddSignalR()
.AddMessagePackProtocol()
.AddStackExchangeRedis(o =>
{
o.ConnectionFactory = async writer =>
{
var config = new ConfigurationOptions
{
AbortOnConnectFail = false
};
config.EndPoints.Add(IPAddress.Loopback, 0);
config.SetDefaultPorts();
var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
connection.ConnectionFailed += (_, e) =>
{
Console.WriteLine("Connection to Redis failed.");
};
if (!connection.IsConnected)
{
Console.WriteLine("Did not connect to Redis.");
}
return connection;
};
});
Redis klastr
Cluster Redis využívá k zajištění vysoké dostupnosti několik současně aktivních serverů Redis. Když se redis Cluster použije jako backplane pro SignalR, zprávy se doručí do všech uzlů clusteru bez úprav kódu aplikace.
Mezi počtem uzlů v clusteru a propustností backplanu existuje kompromis. Zvýšení počtu uzlů zvyšuje dostupnost clusteru, ale snižuje propustnost, protože zprávy se musí přenášet do všech uzlů v clusteru.
SignalR V aplikaci zahrňte všechny možné uzly Redis pomocí některého z následujících přístupů:
- Vypište uzly v připojovacím řetězci oddělené čárkami.
- Pokud používáte vlastní chování pro selhání připojení, přidejte uzly do
ConfigurationOptions.Endpoints.
Další kroky
Další informace naleznete v následujících zdrojích:
Tento článek vysvětluje SignalRkonkrétní aspekty nastavení serveru Redis pro horizontální navýšení kapacity aplikace ASP.NET Core SignalR .
Varování
Tento článek ukazuje použití připojovací řetězec. U místní databáze nemusí být uživatel ověřený, ale v produkčním prostředí připojovací řetězec někdy obsahují heslo k ověření. Přihlašovací údaje vlastníka prostředku (ROPC) jsou bezpečnostní riziko, kterému byste se měli vyhnout v produkčních databázích. Produkční aplikace by měly používat nejbezpečnější dostupný tok ověřování. Další informace o ověřování pro aplikace nasazené do testovacího nebo produkčního prostředí najdete v tématu Zabezpečené toky ověřování.
Nastavte Redis backplane
Nasazení serveru Redis
Důležité
Pro produkční použití se Redis backplane doporučuje pouze tehdy, když běží ve stejném datovém centru jako aplikace SignalR. Jinak latence sítě snižuje výkon. Pokud je vaše SignalR aplikace spuštěná v cloudu Azure, místo backplane Redis doporučujeme službu Azure SignalR .
Další informace naleznete v následujících zdrojích:
SignalR V aplikaci nainstalujte
Microsoft.AspNetCore.SignalR.Redisbalíček NuGet.V metodě
Startup.ConfigureServiceszavolejteAddRedispoAddSignalR:services.AddSignalR().AddRedis("<your_Redis_connection_string>");Podle potřeby nakonfigurujte možnosti:
Většinu možností lze nastavit v připojovací řetězec nebo v objektu ConfigurationOptions. Možnosti zadané v
ConfigurationOptionspřepisují ty, které jsou nastaveny v připojovacím řetězci.Následující příklad ukazuje, jak nastavit možnosti v objektu
ConfigurationOptions. Tento příklad přidá předponu kanálu, aby více aplikací mohly sdílet stejnou instanci Redis, jak je vysvětleno v následujícím kroku.services.AddSignalR() .AddRedis(connectionString, options => { options.Configuration.ChannelPrefix = "MyApp"; });V předchozím kódu se
options.Configurationinicializuje tím, co bylo zadáno v připojovacím řetězci.Pokud používáte jeden server Redis pro více SignalR aplikací, použijte pro každou SignalR aplikaci jinou předponu kanálu.
Nastavení předpony kanálu izoluje jednu SignalR aplikaci od ostatních, které používají různé předpony kanálu. Pokud nepřiřazujete různé předpony, zpráva odeslaná z jedné aplikace všem svým vlastním klientům přejde na všechny klienty všech aplikací, které používají server Redis jako backplane.
Nakonfigurujte software pro vyrovnávání zatížení serverové farmy pro trvalé relace. Tady je několik příkladů dokumentace, jak to udělat:
Chyby serveru Redis
Když server Redis přestane fungovat, SignalR vyvolá výjimky, které indikují, že zprávy se nedoručí. Některé typické zprávy o výjimce:
- Zpráva o neúspěšném zápisu
- Volání metody Hub MethodName se nezdařilo.
- Připojení k Redis se nezdařilo
SignalR nezaznamenává zprávy do vyrovnávací paměti, aby je odeslal, když se server znovu spustí. Všechny zprávy odeslané během výpadku serveru Redis budou ztraceny.
SignalR automaticky se znovu připojí, jakmile bude server Redis znovu k dispozici.
Specifické chování při selhání připojení
Tady je příklad, který ukazuje, jak zpracovat události selhání připojení Redis.
services.AddSignalR()
.AddRedis(o =>
{
o.ConnectionFactory = async writer =>
{
var config = new ConfigurationOptions
{
AbortOnConnectFail = false
};
config.EndPoints.Add(IPAddress.Loopback, 0);
config.SetDefaultPorts();
var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
connection.ConnectionFailed += (_, e) =>
{
Console.WriteLine("Connection to Redis failed.");
};
if (!connection.IsConnected)
{
Console.WriteLine("Did not connect to Redis.");
}
return connection;
};
});
Redis klastr
Cluster Redis využívá k zajištění vysoké dostupnosti několik současně aktivních serverů Redis. Když se redis Cluster použije jako backplane pro SignalR, zprávy se doručí do všech uzlů clusteru bez úprav kódu aplikace.
Mezi počtem uzlů v clusteru a propustností backplanu existuje kompromis. Zvýšení počtu uzlů zvyšuje dostupnost clusteru, ale snižuje propustnost, protože zprávy se musí přenášet do všech uzlů v clusteru.
SignalR V aplikaci zahrňte všechny možné uzly Redis pomocí některého z následujících přístupů:
- Vypište uzly v připojovacím řetězci oddělené čárkami.
- Pokud používáte vlastní chování pro selhání připojení, přidejte uzly do
ConfigurationOptions.Endpoints.
Další kroky
Další informace naleznete v následujících zdrojích: