Aracılığıyla paylaş


ASP.NET Core SignalR ölçeğini genişletmek için Redis arka planını ayarlama

Andrew Stanton-Nurse, Brady Gaster ve Tom Dykstra tarafından.

Bu makalede, ASP.NET Core SignalR uygulamasının ölçeğini genişletme amacıyla kullanılacak bir Redis sunucusu ayarlamanın özel yönleri açıklanmaktadırSignalR.

Uyarı

Bu makalede bağlantı dizesi kullanımı gösterilmektedir. Yerel bir veritabanıyla kullanıcının kimliğinin doğrulanması gerekmez, ancak üretimde bağlantı dizesi bazen kimlik doğrulaması için bir parola içerir. Kaynak sahibi parola kimlik bilgileri (ROPC), üretim veritabanlarında kaçınılması gereken bir güvenlik riskidir. Üretim uygulamaları kullanılabilir en güvenli kimlik doğrulama akışını kullanmalıdır. Test veya üretim ortamlarına dağıtılan uygulamalar için kimlik doğrulaması hakkında daha fazla bilgi için bkz . Güvenli kimlik doğrulama akışları.

Redis arka düzlemini ayarlayın.

  • Redis sunucusu dağıtın.

    Önemli

    Üretim ortamı için, Redis arka planının yalnızca uygulamayla aynı veri merkezinde çalıştığında önerildiğini unutmayın. Aksi takdirde ağ gecikme süresi performansı düşürür. Uygulamanız SignalR Azure bulutunda çalışıyorsa Redis arka planı yerine Azure SignalR Hizmeti'ni öneririz.

    Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:

  • SignalR Uygulamada aşağıdaki NuGet paketini yükleyin:

    • Microsoft.AspNetCore.SignalR.StackExchangeRedis
  • AddStackExchangeRedis çağrısını builder.Build() dosyasındaki Program.cs çağrısından önce aşağıdaki satırı ekleyerek yapın.

    builder.Services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");
    
  • Seçenekleri gerektiği gibi yapılandırın:

    Çoğu seçenek bağlantı dizesinde veya ConfigurationOptions nesnesinde ayarlanabilir. içinde ConfigurationOptions belirtilen seçenekler, bağlantı dizesi ayarlananları geçersiz kılar.

    Aşağıdaki örnekte nesnedeki seçeneklerin nasıl ayarlanacağı gösterilmektedir ConfigurationOptions . Bu örnek, aşağıdaki adımda açıklandığı gibi birden çok uygulamanın aynı Redis örneğini paylaşabilmesi için bir kanal ön eki ekler.

    builder.Services.AddSignalR()
      .AddStackExchangeRedis(connectionString, options => {
          options.Configuration.ChannelPrefix = RedisChannel.Literal("MyApp");
      });
    

    Önceki kodda, options.Configuration, bağlantı dizesinde belirtilen herhangi bir değer ile başlatılır.

    Redis seçenekleri hakkında bilgi için StackExchange Redis belgelerine bakın.

  • Birden çok SignalR uygulama için bir Redis sunucusu kullanıyorsanız, her SignalR uygulama için farklı bir kanal ön eki kullanın.

    Kanal ön ekini ayarlamak, bir SignalR uygulamayı farklı kanal ön ekleri kullanan diğer kullanıcılardan yalıtıyor. Farklı ön ekler atamazsanız, bir uygulamadan kendi istemcilerinin tümüne gönderilen bir ileti, Redis sunucusunu arka plan olarak kullanan tüm uygulamaların tüm istemcilerine gider.

  • Sunucu grubu yük dengeleme yazılımınızı yapışkan oturumlar için yapılandırın. Bunun nasıl yapıldığını gösteren bazı belgeler aşağıda verilmiştir:

Redis sunucusu hataları

Bir Redis sunucusu kapandığında, SignalR iletilerin teslim edilmeyeceğini belirten özel durumlar oluşturur. Bazı tipik özel durum iletileri:

  • İleti yazma başarısız oldu
  • 'MethodName' hub yöntemi çağrılamadı
  • Redis bağlantısı başarısız oldu

SignalR sunucu geri geldiğinde göndermek üzere mesajları arabelleğe almaz. Redis sunucusu kapatılırken gönderilen tüm iletiler kaybolur.

SignalR Redis sunucusu yeniden kullanılabilir olduğunda otomatik olarak yeniden bağlanır.

Bağlantı hataları için özel davranış

Redis bağlantı hatası olaylarının nasıl işleneceğini gösteren bir örnek aşağıda verilmiştir.

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 Kümesi

Redis Kümesi , yüksek kullanılabilirlik elde etmek için birden çok eşzamanlı etkin Redis sunucusu kullanır. Için geri plan SignalRolarak Redis Kümesi kullanıldığında, iletiler uygulamada kod değişikliği yapılmadan kümenin tüm düğümlerine teslim edilir.

Kümedeki düğüm sayısı ile arka düzlemin aktarım hızı arasında bir denge vardır. Düğüm sayısının artırılması kümenin kullanılabilirliğini artırır, ancak iletilerin kümedeki tüm düğümlere iletilmesi gerektiğinden aktarım hızını azaltır.

SignalR Uygulamada, aşağıdaki yaklaşımlardan birini kullanarak tüm olası Redis düğümlerini ekleyin:

  • Virgülle ayrılmış düğümleri bağlantı dizesinde listeleyin.
  • Bağlantı hataları için özelleştirilmiş davranış kullanıyorsanız, düğümleri ConfigurationOptions.Endpoints öğesine ekleyin.

Sonraki adımlar

Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:

Bu makalede, ASP.NET Core SignalR uygulamasının ölçeğini genişletme amacıyla kullanılacak bir Redis sunucusu ayarlamanın özel yönleri açıklanmaktadırSignalR.

Uyarı

Bu makalede bağlantı dizesi kullanımı gösterilmektedir. Yerel bir veritabanıyla kullanıcının kimliğinin doğrulanması gerekmez, ancak üretimde bağlantı dizesi bazen kimlik doğrulaması için bir parola içerir. Kaynak sahibi parola kimlik bilgileri (ROPC), üretim veritabanlarında kaçınılması gereken bir güvenlik riskidir. Üretim uygulamaları kullanılabilir en güvenli kimlik doğrulama akışını kullanmalıdır. Test veya üretim ortamlarına dağıtılan uygulamalar için kimlik doğrulaması hakkında daha fazla bilgi için bkz . Güvenli kimlik doğrulama akışları.

Redis arka düzlemini ayarlayın.

  • Redis sunucusu dağıtın.

    Önemli

    Üretim ortamı için, Redis arka planının yalnızca uygulamayla aynı veri merkezinde çalıştığında önerildiğini unutmayın. Aksi takdirde ağ gecikme süresi performansı düşürür. Uygulamanız SignalR Azure bulutunda çalışıyorsa Redis arka planı yerine Azure SignalR Hizmeti'ni öneririz.

    Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:

  • SignalR Uygulamada aşağıdaki NuGet paketini yükleyin:

    • Microsoft.AspNetCore.SignalR.StackExchangeRedis
  • AddStackExchangeRedis çağrısını builder.Build() dosyasındaki Program.cs çağrısından önce aşağıdaki satırı ekleyerek yapın.

    builder.Services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");
    
  • Seçenekleri gerektiği gibi yapılandırın:

    Çoğu seçenek bağlantı dizesinde veya ConfigurationOptions nesnesinde ayarlanabilir. içinde ConfigurationOptions belirtilen seçenekler, bağlantı dizesi ayarlananları geçersiz kılar.

    Aşağıdaki örnekte nesnedeki seçeneklerin nasıl ayarlanacağı gösterilmektedir ConfigurationOptions . Bu örnek, aşağıdaki adımda açıklandığı gibi birden çok uygulamanın aynı Redis örneğini paylaşabilmesi için bir kanal ön eki ekler.

    services.AddSignalR()
      .AddStackExchangeRedis(connectionString, options => {
          options.Configuration.ChannelPrefix = "MyApp";
      });
    

    Önceki kodda, options.Configuration, bağlantı dizesinde belirtilen herhangi bir değer ile başlatılır.

    Redis seçenekleri hakkında bilgi için StackExchange Redis belgelerine bakın.

  • Birden çok SignalR uygulama için bir Redis sunucusu kullanıyorsanız, her SignalR uygulama için farklı bir kanal ön eki kullanın.

    Kanal ön ekini ayarlamak, bir SignalR uygulamayı farklı kanal ön ekleri kullanan diğer kullanıcılardan yalıtıyor. Farklı ön ekler atamazsanız, bir uygulamadan kendi istemcilerinin tümüne gönderilen bir ileti, Redis sunucusunu arka plan olarak kullanan tüm uygulamaların tüm istemcilerine gider.

  • Sunucu grubu yük dengeleme yazılımınızı yapışkan oturumlar için yapılandırın. Bunun nasıl yapıldığını gösteren bazı belgeler aşağıda verilmiştir:

Redis sunucusu hataları

Bir Redis sunucusu kapandığında, SignalR iletilerin teslim edilmeyeceğini belirten özel durumlar oluşturur. Bazı tipik özel durum iletileri:

  • İleti yazma başarısız oldu
  • 'MethodName' hub yöntemi çağrılamadı
  • Redis bağlantısı başarısız oldu

SignalR sunucu geri geldiğinde göndermek üzere mesajları arabelleğe almaz. Redis sunucusu kapatılırken gönderilen tüm iletiler kaybolur.

SignalR Redis sunucusu yeniden kullanılabilir olduğunda otomatik olarak yeniden bağlanır.

Bağlantı hataları için özel davranış

Redis bağlantı hatası olaylarının nasıl işleneceğini gösteren bir örnek aşağıda verilmiştir.

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 Kümesi

Redis Kümesi , yüksek kullanılabilirlik elde etmek için birden çok eşzamanlı etkin Redis sunucusu kullanır. Için geri plan SignalRolarak Redis Kümesi kullanıldığında, iletiler uygulamada kod değişikliği yapılmadan kümenin tüm düğümlerine teslim edilir.

Kümedeki düğüm sayısı ile arka düzlemin aktarım hızı arasında bir denge vardır. Düğüm sayısının artırılması kümenin kullanılabilirliğini artırır, ancak iletilerin kümedeki tüm düğümlere iletilmesi gerektiğinden aktarım hızını azaltır.

SignalR Uygulamada, aşağıdaki yaklaşımlardan birini kullanarak tüm olası Redis düğümlerini ekleyin:

  • Virgülle ayrılmış düğümleri bağlantı dizesinde listeleyin.
  • Bağlantı hataları için özelleştirilmiş davranış kullanıyorsanız, düğümleri ConfigurationOptions.Endpoints öğesine ekleyin.

Sonraki adımlar

Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:

Bu makalede, ASP.NET Core SignalR uygulamasının ölçeğini genişletme amacıyla kullanılacak bir Redis sunucusu ayarlamanın özel yönleri açıklanmaktadırSignalR.

Uyarı

Bu makalede bağlantı dizesi kullanımı gösterilmektedir. Yerel bir veritabanıyla kullanıcının kimliğinin doğrulanması gerekmez, ancak üretimde bağlantı dizesi bazen kimlik doğrulaması için bir parola içerir. Kaynak sahibi parola kimlik bilgileri (ROPC), üretim veritabanlarında kaçınılması gereken bir güvenlik riskidir. Üretim uygulamaları kullanılabilir en güvenli kimlik doğrulama akışını kullanmalıdır. Test veya üretim ortamlarına dağıtılan uygulamalar için kimlik doğrulaması hakkında daha fazla bilgi için bkz . Güvenli kimlik doğrulama akışları.

Redis arka düzlemini ayarlayın.

  • Redis sunucusu dağıtın.

    Önemli

    Üretim ortamı için, Redis arka planının yalnızca uygulamayla aynı veri merkezinde çalıştığında önerildiğini unutmayın. Aksi takdirde ağ gecikme süresi performansı düşürür. Uygulamanız SignalR Azure bulutunda çalışıyorsa Redis arka planı yerine Azure SignalR Hizmeti'ni öneririz.

    Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:

  • SignalR Uygulamada aşağıdaki NuGet paketini yükleyin:

    • Microsoft.AspNetCore.SignalR.StackExchangeRedis
  • AddStackExchangeRedis çağrısını builder.Build() dosyasındaki Program.cs çağrısından önce aşağıdaki satırı ekleyerek yapın.

    builder.Services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");
    
  • Seçenekleri gerektiği gibi yapılandırın:

    Çoğu seçenek bağlantı dizesinde veya ConfigurationOptions nesnesinde ayarlanabilir. içinde ConfigurationOptions belirtilen seçenekler, bağlantı dizesi ayarlananları geçersiz kılar.

    Aşağıdaki örnekte nesnedeki seçeneklerin nasıl ayarlanacağı gösterilmektedir ConfigurationOptions . Bu örnek, aşağıdaki adımda açıklandığı gibi birden çok uygulamanın aynı Redis örneğini paylaşabilmesi için bir kanal ön eki ekler.

    builder.Services.AddSignalR()
      .AddStackExchangeRedis(connectionString, options => {
          options.Configuration.ChannelPrefix = RedisChannel.Literal("MyApp");
      });
    

    Önceki kodda, options.Configuration, bağlantı dizesinde belirtilen herhangi bir değer ile başlatılır.

    Redis seçenekleri hakkında bilgi için StackExchange Redis belgelerine bakın.

  • Birden çok SignalR uygulama için bir Redis sunucusu kullanıyorsanız, her SignalR uygulama için farklı bir kanal ön eki kullanın.

    Kanal ön ekini ayarlamak, bir SignalR uygulamayı farklı kanal ön ekleri kullanan diğer kullanıcılardan yalıtıyor. Farklı ön ekler atamazsanız, bir uygulamadan kendi istemcilerinin tümüne gönderilen bir ileti, Redis sunucusunu arka plan olarak kullanan tüm uygulamaların tüm istemcilerine gider.

  • Sunucu grubu yük dengeleme yazılımınızı yapışkan oturumlar için yapılandırın. Bunun nasıl yapıldığını gösteren bazı belgeler aşağıda verilmiştir:

Redis sunucusu hataları

Bir Redis sunucusu kapandığında, SignalR iletilerin teslim edilmeyeceğini belirten özel durumlar oluşturur. Bazı tipik özel durum iletileri:

  • İleti yazma başarısız oldu
  • 'MethodName' hub yöntemi çağrılamadı
  • Redis bağlantısı başarısız oldu

SignalR sunucu geri geldiğinde göndermek üzere mesajları arabelleğe almaz. Redis sunucusu kapatılırken gönderilen tüm iletiler kaybolur.

SignalR Redis sunucusu yeniden kullanılabilir olduğunda otomatik olarak yeniden bağlanır.

Bağlantı hataları için özel davranış

Redis bağlantı hatası olaylarının nasıl işleneceğini gösteren bir örnek aşağıda verilmiştir.

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 Kümesi

Redis Kümesi , yüksek kullanılabilirlik elde etmek için birden çok eşzamanlı etkin Redis sunucusu kullanır. Için geri plan SignalRolarak Redis Kümesi kullanıldığında, iletiler uygulamada kod değişikliği yapılmadan kümenin tüm düğümlerine teslim edilir.

Kümedeki düğüm sayısı ile arka düzlemin aktarım hızı arasında bir denge vardır. Düğüm sayısının artırılması kümenin kullanılabilirliğini artırır, ancak iletilerin kümedeki tüm düğümlere iletilmesi gerektiğinden aktarım hızını azaltır.

SignalR Uygulamada, aşağıdaki yaklaşımlardan birini kullanarak tüm olası Redis düğümlerini ekleyin:

  • Virgülle ayrılmış düğümleri bağlantı dizesinde listeleyin.
  • Bağlantı hataları için özelleştirilmiş davranış kullanıyorsanız, düğümleri ConfigurationOptions.Endpoints öğesine ekleyin.

Sonraki adımlar

Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:

Bu makalede, ASP.NET Core SignalR uygulamasının ölçeğini genişletme amacıyla kullanılacak bir Redis sunucusu ayarlamanın özel yönleri açıklanmaktadırSignalR.

Uyarı

Bu makalede bağlantı dizesi kullanımı gösterilmektedir. Yerel bir veritabanıyla kullanıcının kimliğinin doğrulanması gerekmez, ancak üretimde bağlantı dizesi bazen kimlik doğrulaması için bir parola içerir. Kaynak sahibi parola kimlik bilgileri (ROPC), üretim veritabanlarında kaçınılması gereken bir güvenlik riskidir. Üretim uygulamaları kullanılabilir en güvenli kimlik doğrulama akışını kullanmalıdır. Test veya üretim ortamlarına dağıtılan uygulamalar için kimlik doğrulaması hakkında daha fazla bilgi için bkz . Güvenli kimlik doğrulama akışları.

Redis arka düzlemini ayarlayın.

  • Redis sunucusu dağıtın.

    Önemli

    Üretim ortamı için, Redis arka planının yalnızca uygulamayla aynı veri merkezinde çalıştığında önerildiğini unutmayın. Aksi takdirde ağ gecikme süresi performansı düşürür. Uygulamanız SignalR Azure bulutunda çalışıyorsa Redis arka planı yerine Azure SignalR Hizmeti'ni öneririz.

    Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:

  • SignalR Uygulamada aşağıdaki NuGet paketini yükleyin:

    • Microsoft.AspNetCore.SignalR.StackExchangeRedis
  • Startup.ConfigureServices yönteminde AddStackExchangeRedis öğesini çağırın.

    services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");
    
  • Seçenekleri gerektiği gibi yapılandırın:

    Çoğu seçenek bağlantı dizesinde veya ConfigurationOptions nesnesinde ayarlanabilir. içinde ConfigurationOptions belirtilen seçenekler, bağlantı dizesi ayarlananları geçersiz kılar.

    Aşağıdaki örnekte nesnedeki seçeneklerin nasıl ayarlanacağı gösterilmektedir ConfigurationOptions . Bu örnek, aşağıdaki adımda açıklandığı gibi birden çok uygulamanın aynı Redis örneğini paylaşabilmesi için bir kanal ön eki ekler.

    services.AddSignalR()
      .AddStackExchangeRedis(connectionString, options => {
          options.Configuration.ChannelPrefix = "MyApp";
      });
    

    Önceki kodda, options.Configuration, bağlantı dizesinde belirtilen herhangi bir değer ile başlatılır.

    Redis seçenekleri hakkında bilgi için StackExchange Redis belgelerine bakın.

  • Birden çok SignalR uygulama için bir Redis sunucusu kullanıyorsanız, her SignalR uygulama için farklı bir kanal ön eki kullanın.

    Kanal ön ekini ayarlamak, bir SignalR uygulamayı farklı kanal ön ekleri kullanan diğer kullanıcılardan yalıtıyor. Farklı ön ekler atamazsanız, bir uygulamadan kendi istemcilerinin tümüne gönderilen bir ileti, Redis sunucusunu arka plan olarak kullanan tüm uygulamaların tüm istemcilerine gider.

  • Sunucu grubu yük dengeleme yazılımınızı yapışkan oturumlar için yapılandırın. Bunun nasıl yapıldığını gösteren bazı belgeler aşağıda verilmiştir:

Redis sunucusu hataları

Bir Redis sunucusu kapandığında, SignalR iletilerin teslim edilmeyeceğini belirten özel durumlar oluşturur. Bazı tipik özel durum iletileri:

  • İleti yazma başarısız oldu
  • 'MethodName' hub yöntemi çağrılamadı
  • Redis bağlantısı başarısız oldu

SignalR sunucu geri geldiğinde göndermek üzere mesajları arabelleğe almaz. Redis sunucusu kapatılırken gönderilen tüm iletiler kaybolur.

SignalR Redis sunucusu yeniden kullanılabilir olduğunda otomatik olarak yeniden bağlanır.

Bağlantı hataları için özel davranış

Redis bağlantı hatası olaylarının nasıl işleneceğini gösteren bir örnek aşağıda verilmiştir.

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 Kümesi

Redis Kümesi , yüksek kullanılabilirlik elde etmek için birden çok eşzamanlı etkin Redis sunucusu kullanır. Için geri plan SignalRolarak Redis Kümesi kullanıldığında, iletiler uygulamada kod değişikliği yapılmadan kümenin tüm düğümlerine teslim edilir.

Kümedeki düğüm sayısı ile arka düzlemin aktarım hızı arasında bir denge vardır. Düğüm sayısının artırılması kümenin kullanılabilirliğini artırır, ancak iletilerin kümedeki tüm düğümlere iletilmesi gerektiğinden aktarım hızını azaltır.

SignalR Uygulamada, aşağıdaki yaklaşımlardan birini kullanarak tüm olası Redis düğümlerini ekleyin:

  • Virgülle ayrılmış düğümleri bağlantı dizesinde listeleyin.
  • Bağlantı hataları için özelleştirilmiş davranış kullanıyorsanız, düğümleri ConfigurationOptions.Endpoints öğesine ekleyin.

Sonraki adımlar

Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:

Bu makalede, ASP.NET Core SignalR uygulamasının ölçeğini genişletme amacıyla kullanılacak bir Redis sunucusu ayarlamanın özel yönleri açıklanmaktadırSignalR.

Uyarı

Bu makalede bağlantı dizesi kullanımı gösterilmektedir. Yerel bir veritabanıyla kullanıcının kimliğinin doğrulanması gerekmez, ancak üretimde bağlantı dizesi bazen kimlik doğrulaması için bir parola içerir. Kaynak sahibi parola kimlik bilgileri (ROPC), üretim veritabanlarında kaçınılması gereken bir güvenlik riskidir. Üretim uygulamaları kullanılabilir en güvenli kimlik doğrulama akışını kullanmalıdır. Test veya üretim ortamlarına dağıtılan uygulamalar için kimlik doğrulaması hakkında daha fazla bilgi için bkz . Güvenli kimlik doğrulama akışları.

Redis arka düzlemini ayarlayın.

  • Redis sunucusu dağıtın.

    Önemli

    Üretim ortamı için, Redis arka planının yalnızca uygulamayla aynı veri merkezinde çalıştığında önerildiğini unutmayın. Aksi takdirde ağ gecikme süresi performansı düşürür. Uygulamanız SignalR Azure bulutunda çalışıyorsa Redis arka planı yerine Azure SignalR Hizmeti'ni öneririz.

    Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:

  • SignalR Uygulamada aşağıdaki NuGet paketini yükleyin:

    • Microsoft.AspNetCore.SignalR.StackExchangeRedis
  • Startup.ConfigureServices yönteminde AddStackExchangeRedis öğesini çağırın.

    services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");
    
  • Seçenekleri gerektiği gibi yapılandırın:

    Çoğu seçenek bağlantı dizesinde veya ConfigurationOptions nesnesinde ayarlanabilir. içinde ConfigurationOptions belirtilen seçenekler, bağlantı dizesi ayarlananları geçersiz kılar.

    Aşağıdaki örnekte nesnedeki seçeneklerin nasıl ayarlanacağı gösterilmektedir ConfigurationOptions . Bu örnek, aşağıdaki adımda açıklandığı gibi birden çok uygulamanın aynı Redis örneğini paylaşabilmesi için bir kanal ön eki ekler.

    services.AddSignalR()
      .AddStackExchangeRedis(connectionString, options => {
          options.Configuration.ChannelPrefix = "MyApp";
      });
    

    Önceki kodda, options.Configuration, bağlantı dizesinde belirtilen herhangi bir değer ile başlatılır.

    Redis seçenekleri hakkında bilgi için StackExchange Redis belgelerine bakın.

  • Birden çok SignalR uygulama için bir Redis sunucusu kullanıyorsanız, her SignalR uygulama için farklı bir kanal ön eki kullanın.

    Kanal ön ekini ayarlamak, bir SignalR uygulamayı farklı kanal ön ekleri kullanan diğer kullanıcılardan yalıtıyor. Farklı ön ekler atamazsanız, bir uygulamadan kendi istemcilerinin tümüne gönderilen bir ileti, Redis sunucusunu arka plan olarak kullanan tüm uygulamaların tüm istemcilerine gider.

  • Sunucu grubu yük dengeleme yazılımınızı yapışkan oturumlar için yapılandırın. Bunun nasıl yapıldığını gösteren bazı belgeler aşağıda verilmiştir:

Redis sunucusu hataları

Bir Redis sunucusu kapandığında, SignalR iletilerin teslim edilmeyeceğini belirten özel durumlar oluşturur. Bazı tipik özel durum iletileri:

  • İleti yazma başarısız oldu
  • 'MethodName' hub yöntemi çağrılamadı
  • Redis bağlantısı başarısız oldu

SignalR sunucu geri geldiğinde göndermek üzere mesajları arabelleğe almaz. Redis sunucusu kapatılırken gönderilen tüm iletiler kaybolur.

SignalR Redis sunucusu yeniden kullanılabilir olduğunda otomatik olarak yeniden bağlanır.

Bağlantı hataları için özel davranış

Redis bağlantı hatası olaylarının nasıl işleneceğini gösteren bir örnek aşağıda verilmiştir.

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 Kümesi

Redis Kümesi , yüksek kullanılabilirlik elde etmek için birden çok eşzamanlı etkin Redis sunucusu kullanır. Için geri plan SignalRolarak Redis Kümesi kullanıldığında, iletiler uygulamada kod değişikliği yapılmadan kümenin tüm düğümlerine teslim edilir.

Kümedeki düğüm sayısı ile arka düzlemin aktarım hızı arasında bir denge vardır. Düğüm sayısının artırılması kümenin kullanılabilirliğini artırır, ancak iletilerin kümedeki tüm düğümlere iletilmesi gerektiğinden aktarım hızını azaltır.

SignalR Uygulamada, aşağıdaki yaklaşımlardan birini kullanarak tüm olası Redis düğümlerini ekleyin:

  • Virgülle ayrılmış düğümleri bağlantı dizesinde listeleyin.
  • Bağlantı hataları için özelleştirilmiş davranış kullanıyorsanız, düğümleri ConfigurationOptions.Endpoints öğesine ekleyin.

Sonraki adımlar

Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:

Bu makalede, ASP.NET Core SignalR uygulamasının ölçeğini genişletme amacıyla kullanılacak bir Redis sunucusu ayarlamanın özel yönleri açıklanmaktadırSignalR.

Uyarı

Bu makalede bağlantı dizesi kullanımı gösterilmektedir. Yerel bir veritabanıyla kullanıcının kimliğinin doğrulanması gerekmez, ancak üretimde bağlantı dizesi bazen kimlik doğrulaması için bir parola içerir. Kaynak sahibi parola kimlik bilgileri (ROPC), üretim veritabanlarında kaçınılması gereken bir güvenlik riskidir. Üretim uygulamaları kullanılabilir en güvenli kimlik doğrulama akışını kullanmalıdır. Test veya üretim ortamlarına dağıtılan uygulamalar için kimlik doğrulaması hakkında daha fazla bilgi için bkz . Güvenli kimlik doğrulama akışları.

Redis arka düzlemini ayarlayın.

  • Redis sunucusu dağıtın.

    Önemli

    Üretim ortamı için, Redis arka planının yalnızca uygulamayla aynı veri merkezinde çalıştığında önerildiğini unutmayın. Aksi takdirde ağ gecikme süresi performansı düşürür. Uygulamanız SignalR Azure bulutunda çalışıyorsa Redis arka planı yerine Azure SignalR Hizmeti'ni öneririz.

    Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:

  • SignalR Uygulamada aşağıdaki NuGet paketlerinden birini yükleyin:

    • Microsoft.AspNetCore.SignalR.StackExchangeRedis - StackExchange.Redis 2.X.X'e bağlıdır. Bu, ASP.NET Core 2.2 veya üzeri için önerilen pakettir.
    • Microsoft.AspNetCore.SignalR.Redis - StackExchange.Redis 1.X.X'e bağlıdır. Bu paket ASP.NET Core 3.0 veya sonraki sürümlere dahil değildir.
  • Startup.ConfigureServices yönteminde AddStackExchangeRedis öğesini çağırın.

    services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");
    

Microsoft.AspNetCore.SignalR.Redis kullanılırken AddRedis çağrısını yapın.

  • Seçenekleri gerektiği gibi yapılandırın:

    Çoğu seçenek bağlantı dizesi veya ConfigurationOptions nesnesinde ayarlanabilir. içinde ConfigurationOptions belirtilen seçenekler, bağlantı dizesi ayarlananları geçersiz kılar.

    Aşağıdaki örnekte nesnedeki seçeneklerin nasıl ayarlanacağı gösterilmektedir ConfigurationOptions . Bu örnek, aşağıdaki adımda açıklandığı gibi birden çok uygulamanın aynı Redis örneğini paylaşabilmesi için bir kanal ön eki ekler.

    services.AddSignalR()
      .AddStackExchangeRedis(connectionString, options => {
          options.Configuration.ChannelPrefix = "MyApp";
      });
    

Microsoft.AspNetCore.SignalR.Redis kullanılırken AddRedis çağrısını yapın.

Önceki kodda, options.Configuration, bağlantı dizesinde belirtilen herhangi bir değer ile başlatılır.

Redis seçenekleri hakkında bilgi için StackExchange Redis belgelerine bakın.

  • Birden çok SignalR uygulama için bir Redis sunucusu kullanıyorsanız, her SignalR uygulama için farklı bir kanal ön eki kullanın.

    Kanal ön ekini ayarlamak, bir SignalR uygulamayı farklı kanal ön ekleri kullanan diğer kullanıcılardan yalıtıyor. Farklı ön ekler atamazsanız, bir uygulamadan kendi istemcilerinin tümüne gönderilen bir ileti, Redis sunucusunu arka plan olarak kullanan tüm uygulamaların tüm istemcilerine gider.

  • Sunucu grubu yük dengeleme yazılımınızı yapışkan oturumlar için yapılandırın. Bunun nasıl yapıldığını gösteren bazı belgeler aşağıda verilmiştir:

Redis sunucusu hataları

Bir Redis sunucusu kapandığında, SignalR iletilerin teslim edilmeyeceğini belirten özel durumlar oluşturur. Bazı tipik özel durum iletileri:

  • İleti yazma başarısız oldu
  • 'MethodName' hub yöntemi çağrılamadı
  • Redis bağlantısı başarısız oldu

SignalR sunucu geri geldiğinde göndermek üzere mesajları arabelleğe almaz. Redis sunucusu kapatılırken gönderilen tüm iletiler kaybolur.

SignalR Redis sunucusu yeniden kullanılabilir olduğunda otomatik olarak yeniden bağlanır.

Bağlantı hataları için özel davranış

Redis bağlantı hatası olaylarının nasıl işleneceğini gösteren bir örnek aşağıda verilmiştir.

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 Kümesi

Redis Kümesi , yüksek kullanılabilirlik elde etmek için birden çok eşzamanlı etkin Redis sunucusu kullanır. Için geri plan SignalRolarak Redis Kümesi kullanıldığında, iletiler uygulamada kod değişikliği yapılmadan kümenin tüm düğümlerine teslim edilir.

Kümedeki düğüm sayısı ile arka düzlemin aktarım hızı arasında bir denge vardır. Düğüm sayısının artırılması kümenin kullanılabilirliğini artırır, ancak iletilerin kümedeki tüm düğümlere iletilmesi gerektiğinden aktarım hızını azaltır.

SignalR Uygulamada, aşağıdaki yaklaşımlardan birini kullanarak tüm olası Redis düğümlerini ekleyin:

  • Virgülle ayrılmış düğümleri bağlantı dizesinde listeleyin.
  • Bağlantı hataları için özelleştirilmiş davranış kullanıyorsanız, düğümleri ConfigurationOptions.Endpoints öğesine ekleyin.

Sonraki adımlar

Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:

Bu makalede, ASP.NET Core SignalR uygulamasının ölçeğini genişletme amacıyla kullanılacak bir Redis sunucusu ayarlamanın özel yönleri açıklanmaktadırSignalR.

Uyarı

Bu makalede bağlantı dizesi kullanımı gösterilmektedir. Yerel bir veritabanıyla kullanıcının kimliğinin doğrulanması gerekmez, ancak üretimde bağlantı dizesi bazen kimlik doğrulaması için bir parola içerir. Kaynak sahibi parola kimlik bilgileri (ROPC), üretim veritabanlarında kaçınılması gereken bir güvenlik riskidir. Üretim uygulamaları kullanılabilir en güvenli kimlik doğrulama akışını kullanmalıdır. Test veya üretim ortamlarına dağıtılan uygulamalar için kimlik doğrulaması hakkında daha fazla bilgi için bkz . Güvenli kimlik doğrulama akışları.

Redis arka düzlemini ayarlayın.

  • Redis sunucusu dağıtın.

    Önemli

    Üretim ortamı için, Redis arka planının yalnızca uygulamayla aynı veri merkezinde çalıştığında önerildiğini unutmayın. Aksi takdirde ağ gecikme süresi performansı düşürür. Uygulamanız SignalR Azure bulutunda çalışıyorsa Redis arka planı yerine Azure SignalR Hizmeti'ni öneririz.

    Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:

  • SignalR Uygulamada NuGet paketini yükleyinMicrosoft.AspNetCore.SignalR.Redis.

  • yönteminde Startup.ConfigureServices öğesinin ardından AddRedisöğesini çağırınAddSignalR:

    services.AddSignalR().AddRedis("<your_Redis_connection_string>");
    
  • Seçenekleri gerektiği gibi yapılandırın:

    Çoğu seçenek bağlantı dizesi veya ConfigurationOptions nesnesinde ayarlanabilir. içinde ConfigurationOptions belirtilen seçenekler, bağlantı dizesi ayarlananları geçersiz kılar.

    Aşağıdaki örnekte nesnedeki seçeneklerin nasıl ayarlanacağı gösterilmektedir ConfigurationOptions . Bu örnek, aşağıdaki adımda açıklandığı gibi birden çok uygulamanın aynı Redis örneğini paylaşabilmesi için bir kanal ön eki ekler.

    services.AddSignalR()
      .AddRedis(connectionString, options => {
          options.Configuration.ChannelPrefix = "MyApp";
      });
    

    Önceki kodda, options.Configuration, bağlantı dizesinde belirtilen herhangi bir değer ile başlatılır.

  • Birden çok SignalR uygulama için bir Redis sunucusu kullanıyorsanız, her SignalR uygulama için farklı bir kanal ön eki kullanın.

    Kanal ön ekini ayarlamak, bir SignalR uygulamayı farklı kanal ön ekleri kullanan diğer kullanıcılardan yalıtıyor. Farklı ön ekler atamazsanız, bir uygulamadan kendi istemcilerinin tümüne gönderilen bir ileti, Redis sunucusunu arka plan olarak kullanan tüm uygulamaların tüm istemcilerine gider.

  • Sunucu grubu yük dengeleme yazılımınızı yapışkan oturumlar için yapılandırın. Bunun nasıl yapıldığını gösteren bazı belgeler aşağıda verilmiştir:

Redis sunucusu hataları

Bir Redis sunucusu kapandığında, SignalR iletilerin teslim edilmeyeceğini belirten özel durumlar oluşturur. Bazı tipik özel durum iletileri:

  • İleti yazma başarısız oldu
  • 'MethodName' hub yöntemi çağrılamadı
  • Redis bağlantısı başarısız oldu

SignalR sunucu geri geldiğinde göndermek üzere mesajları arabelleğe almaz. Redis sunucusu kapatılırken gönderilen tüm iletiler kaybolur.

SignalR Redis sunucusu yeniden kullanılabilir olduğunda otomatik olarak yeniden bağlanır.

Bağlantı hataları için özel davranış

Redis bağlantı hatası olaylarının nasıl işleneceğini gösteren bir örnek aşağıda verilmiştir.

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 Kümesi

Redis Kümesi , yüksek kullanılabilirlik elde etmek için birden çok eşzamanlı etkin Redis sunucusu kullanır. Için geri plan SignalRolarak Redis Kümesi kullanıldığında, iletiler uygulamada kod değişikliği yapılmadan kümenin tüm düğümlerine teslim edilir.

Kümedeki düğüm sayısı ile arka düzlemin aktarım hızı arasında bir denge vardır. Düğüm sayısının artırılması kümenin kullanılabilirliğini artırır, ancak iletilerin kümedeki tüm düğümlere iletilmesi gerektiğinden aktarım hızını azaltır.

SignalR Uygulamada, aşağıdaki yaklaşımlardan birini kullanarak tüm olası Redis düğümlerini ekleyin:

  • Virgülle ayrılmış düğümleri bağlantı dizesinde listeleyin.
  • Bağlantı hataları için özelleştirilmiş davranış kullanıyorsanız, düğümleri ConfigurationOptions.Endpoints öğesine ekleyin.

Sonraki adımlar

Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın: