Sdílet prostřednictvím


Nastavte Redis backplane pro rozšíření kapacity ASP.NET Core SignalR

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é v ConfigurationOptions př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.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 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é v ConfigurationOptions př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.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 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é v ConfigurationOptions př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.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 následující balíček NuGet:

    • Microsoft.AspNetCore.SignalR.StackExchangeRedis
  • Startup.ConfigureServices V 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é v ConfigurationOptions př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.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 následující balíček NuGet:

    • Microsoft.AspNetCore.SignalR.StackExchangeRedis
  • Startup.ConfigureServices V 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é v ConfigurationOptions př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.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 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.ConfigureServices V 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 ConfigurationOptions př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.Redis balíček NuGet.

  • V metodě Startup.ConfigureServices zavolejte AddRedis po AddSignalR:

    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 ConfigurationOptions př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.Configuration inicializuje 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: