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.
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ü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ınProgram.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çindeConfigurationOptions
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 bağlantısı 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.Endpoints
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ü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ınProgram.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çindeConfigurationOptions
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 bağlantısı 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.Endpoints
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ü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ınProgram.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çindeConfigurationOptions
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 bağlantısı 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.Endpoints
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ü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çindeConfigurationOptions
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 bağlantısı 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.Endpoints
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ü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çindeConfigurationOptions
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 bağlantısı 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.Endpoints
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ü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 bağlantısı 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.Endpoints
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ü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ükleyin
Microsoft.AspNetCore.SignalR.Redis
.yönteminde
Startup.ConfigureServices
öğesinin ardındanAddSignalR
öğ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 bağlantısı 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.Endpoints
ekleyin.
Sonraki adımlar
Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:
ASP.NET Core