Aracılığıyla paylaş


ASP.NET Core SignalR ölçeği genişletme için Redis arka düzlemi 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.

Redis arka düzlemi ayarlama

  • Redis sunucusu dağıtma.

    Önemli

    Üretim kullanımı için redis arka düzlemi yalnızca uygulamayla aynı veri merkezinde SignalR çalıştığında önerilir. 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
  • aşağıdaki AddStackExchangeRedis satırı çağıran builder.Build()satırdan önce dosyaya ekleyerek çağırın Program.cs .

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

    Çoğu seçenek bağlantı dizesi veya nesnesinde ConfigurationOptions 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ı dizesi belirtilen 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 yazılamadı
  • 'MethodName' hub yöntemi çağrılamadı
  • Redis'e Bağlan başarısız oldu

SignalR sunucu geri geldiğinde iletileri göndermek için 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:

  • bağlantı dizesi virgülle ayrılmış düğümleri listeleyin.
  • Bağlantı hataları için özel davranış kullanıyorsanız düğümleri öğesine ConfigurationOptions.Endpointsekleyin.

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.

Redis arka düzlemi ayarlama

  • Redis sunucusu dağıtma.

    Önemli

    Üretim kullanımı için redis arka düzlemi yalnızca uygulamayla aynı veri merkezinde SignalR çalıştığında önerilir. 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
  • aşağıdaki AddStackExchangeRedis satırı çağıran builder.Build()satırdan önce dosyaya ekleyerek çağırın Program.cs .

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

    Çoğu seçenek bağlantı dizesi veya nesnesinde ConfigurationOptions 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ı dizesi belirtilen 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 yazılamadı
  • 'MethodName' hub yöntemi çağrılamadı
  • Redis'e Bağlan başarısız oldu

SignalR sunucu geri geldiğinde iletileri göndermek için 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:

  • bağlantı dizesi virgülle ayrılmış düğümleri listeleyin.
  • Bağlantı hataları için özel davranış kullanıyorsanız düğümleri öğesine ConfigurationOptions.Endpointsekleyin.

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.

Redis arka düzlemi ayarlama

  • Redis sunucusu dağıtma.

    Önemli

    Üretim kullanımı için redis arka düzlemi yalnızca uygulamayla aynı veri merkezinde SignalR çalıştığında önerilir. 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
  • aşağıdaki AddStackExchangeRedis satırı çağıran builder.Build()satırdan önce dosyaya ekleyerek çağırın Program.cs .

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

    Çoğu seçenek bağlantı dizesi veya nesnesinde ConfigurationOptions 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ı dizesi belirtilen 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 yazılamadı
  • 'MethodName' hub yöntemi çağrılamadı
  • Redis'e Bağlan başarısız oldu

SignalR sunucu geri geldiğinde iletileri göndermek için 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:

  • bağlantı dizesi virgülle ayrılmış düğümleri listeleyin.
  • Bağlantı hataları için özel davranış kullanıyorsanız düğümleri öğesine ConfigurationOptions.Endpointsekleyin.

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.

Redis arka düzlemi ayarlama

  • Redis sunucusu dağıtma.

    Önemli

    Üretim kullanımı için redis arka düzlemi yalnızca uygulamayla aynı veri merkezinde SignalR çalıştığında önerilir. 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
  • yönteminde Startup.ConfigureServices öğesini çağırın AddStackExchangeRedis:

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

    Çoğu seçenek bağlantı dizesi veya nesnesinde ConfigurationOptions 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ı dizesi belirtilen 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 yazılamadı
  • 'MethodName' hub yöntemi çağrılamadı
  • Redis'e Bağlan başarısız oldu

SignalR sunucu geri geldiğinde iletileri göndermek için 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:

  • bağlantı dizesi virgülle ayrılmış düğümleri listeleyin.
  • Bağlantı hataları için özel davranış kullanıyorsanız düğümleri öğesine ConfigurationOptions.Endpointsekleyin.

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.

Redis arka düzlemi ayarlama

  • Redis sunucusu dağıtma.

    Önemli

    Üretim kullanımı için redis arka düzlemi yalnızca uygulamayla aynı veri merkezinde SignalR çalıştığında önerilir. 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
  • yönteminde Startup.ConfigureServices öğesini çağırın AddStackExchangeRedis:

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

    Çoğu seçenek bağlantı dizesi veya nesnesinde ConfigurationOptions 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ı dizesi belirtilen 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 yazılamadı
  • 'MethodName' hub yöntemi çağrılamadı
  • Redis'e Bağlan başarısız oldu

SignalR sunucu geri geldiğinde iletileri göndermek için 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:

  • bağlantı dizesi virgülle ayrılmış düğümleri listeleyin.
  • Bağlantı hataları için özel davranış kullanıyorsanız düğümleri öğesine ConfigurationOptions.Endpointsekleyin.

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.

Redis arka düzlemi ayarlama

  • Redis sunucusu dağıtma.

    Önemli

    Üretim kullanımı için redis arka düzlemi yalnızca uygulamayla aynı veri merkezinde SignalR çalıştığında önerilir. 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 ve ü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 ve sonraki sürümlere dahil değildir.
  • yönteminde Startup.ConfigureServices öğesini çağırın AddStackExchangeRedis:

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

kullanırken Microsoft.AspNetCore.SignalR.Redisçağrısında bulunur AddRedis.

  • 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";
      });
    

kullanırken Microsoft.AspNetCore.SignalR.Redisçağrısında bulunur AddRedis.

Önceki kodda, options.Configuration bağlantı dizesi belirtilen 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 yazılamadı
  • 'MethodName' hub yöntemi çağrılamadı
  • Redis'e Bağlan başarısız oldu

SignalR sunucu geri geldiğinde iletileri göndermek için 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:

  • bağlantı dizesi virgülle ayrılmış düğümleri listeleyin.
  • Bağlantı hataları için özel davranış kullanıyorsanız düğümleri öğesine ConfigurationOptions.Endpointsekleyin.

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.

Redis arka düzlemi ayarlama

  • Redis sunucusu dağıtma.

    Önemli

    Üretim kullanımı için redis arka düzlemi yalnızca uygulamayla aynı veri merkezinde SignalR çalıştığında önerilir. 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 AddSignalRöğesini çağırınAddRedis:

    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ı dizesi belirtilen 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 yazılamadı
  • 'MethodName' hub yöntemi çağrılamadı
  • Redis'e Bağlan başarısız oldu

SignalR sunucu geri geldiğinde iletileri göndermek için 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:

  • bağlantı dizesi virgülle ayrılmış düğümleri listeleyin.
  • Bağlantı hataları için özel davranış kullanıyorsanız düğümleri öğesine ConfigurationOptions.Endpointsekleyin.

Sonraki adımlar

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