Redis ile SignalR Ölçeğini Genişletme
Uyarı
Bu belgeler SignalR'nin en son sürümüne yönelik değildir. SignalR ASP.NET Core göz atın.
Bu konuda kullanılan yazılım sürümleri
- Visual Studio 2013
- .NET 4.5
- SignalR sürüm 2.4
Bu konunun önceki sürümleri
SignalR'nin önceki sürümleri hakkında bilgi için bkz. SignalR Eski Sürümleri.
Sorular ve yorumlar
Lütfen bu öğreticiyi nasıl beğendiğiniz ve sayfanın altındaki yorumlarda neleri geliştirebileceğimiz hakkında geri bildirim bırakın. Öğreticiyle doğrudan ilgili olmayan sorularınız varsa bunları ASP.NET SignalR forumunu veya StackOverflow.com gönderebilirsiniz.
Bu öğreticide, redis kullanarak iletileri iki ayrı IIS örneğine dağıtılan signalr uygulaması arasında dağıtacaksınız.
Redis bellek içi anahtar-değer deposudur. Ayrıca yayımlama/abone olma modeline sahip bir mesajlaşma sistemini de destekler. SignalR Redis arka planı, iletileri diğer sunuculara iletmek için pub/sub özelliğini kullanır.
Bu öğretici için üç sunucu kullanacaksınız:
- SignalR uygulamasını dağıtmak için kullanacağınız Windows çalıştıran iki sunucu.
- Redis'i çalıştırmak için kullanacağınız Linux çalıştıran bir sunucu. Bu öğreticideki ekran görüntüleri için Ubuntu 12.04 TLS kullandım.
Kullanılacak üç fiziksel sunucunuz yoksa Hyper-V üzerinde VM oluşturabilirsiniz. Bir diğer seçenek de Azure'da VM oluşturmaktır.
Bu öğretici resmi Redis uygulamasını kullansa da, MSOpenTech'ten bir Windows Redis bağlantı noktası da vardır. Kurulum ve yapılandırma farklıdır, ancak aksi takdirde adımlar aynıdır.
Not
Redis ile SignalR ölçeğini genişletme, Redis kümelerini desteklemez.
Genel Bakış
Ayrıntılı öğreticiye geçmeden önce, neler yapacağınıza ilişkin hızlı bir genel bakış aşağıda verilmiştir.
Redis'i yükleyin ve Redis sunucusunu başlatın.
Bu NuGet paketlerini uygulamanıza ekleyin:
SignalR uygulaması oluşturun.
Arka düzlemi yapılandırmak için Startup.cs dosyasına aşağıdaki kodu ekleyin:
public class Startup { public void Configuration(IAppBuilder app) { // Any connection or hub wire up and configuration should go here GlobalHost.DependencyResolver.UseStackExchangeRedis("server", port, "password", "AppName"); app.MapSignalR(); } }
Hyper-V üzerinde Ubuntu
Windows Hyper-V kullanarak, Windows Server'da kolayca bir Ubuntu VM oluşturabilirsiniz.
Ubuntu ISO dosyasını adresinden http://www.ubuntu.comindirin.
Hyper-V'de yeni bir VM ekleyin. Sanal Sabit Diske Bağlan adımında Sanal sabit disk oluştur'u seçin.
Yükleme Seçenekleri adımında Görüntü dosyası (.iso) öğesini seçin, Gözat'a tıklayın ve Ubuntu yükleme ISO'sunu bulun.
Redis'i yükleme
Redis'i indirip derlemek için konumundaki http://redis.io/download adımları izleyin.
wget http://redis.googlecode.com/files/redis-2.6.12.tar.gz
tar xzf redis-2.6.12.tar.gz
cd redis-2.6.12
make
Bu, dizinindeki src
Redis ikili dosyalarını oluşturur.
Redis varsayılan olarak parola gerektirmez. Parola ayarlamak için kaynak kodun redis.conf
kök dizininde bulunan dosyayı düzenleyin. (Düzenlemeden önce dosyanın yedek kopyasını oluştur!) Aşağıdaki yönergeyi içine redis.conf
ekleyin:
requirepass YourStrongPassword1234
Şimdi Redis sunucusunu başlatın:
src/redis-server redis.conf
Redis'in dinlediği varsayılan bağlantı noktası olan 6379 numaralı bağlantı noktasını açın. (Yapılandırma dosyasındaki bağlantı noktası numarasını değiştirebilirsiniz.)
SignalR Uygulamasını Oluşturma
Bu öğreticilerden birini izleyerek bir SignalR uygulaması oluşturun:
Şimdi redis ile ölçeği genişletmeyi desteklemek için sohbet uygulamasını değiştireceğiz. İlk olarak NuGet paketini projenize ekleyin Microsoft.AspNet.SignalR.StackExchangeRedis
. Visual Studio'da Araçlar menüsünde NuGet Paket Yöneticisi'ni ve ardından Paket Yöneticisi Konsolu'nu seçin. Paket Yöneticisi Konsolu penceresinde aşağıdaki komutu girin:
Install-Package Microsoft.AspNet.SignalR.StackExchangeRedis
Ardından Startup.cs dosyasını açın. Configuration yöntemine aşağıdaki kodu ekleyin:
public class Startup
{
public void Configuration(IAppBuilder app)
{
// Any connection or hub wire up and configuration should go here
GlobalHost.DependencyResolver.UseStackExchangeRedis("server", port, "password", "AppName");
app.MapSignalR();
}
}
- "server", Redis çalıştıran sunucunun adıdır.
- bağlantı noktası , bağlantı noktası numarasıdır
- "password", redis.conf dosyasında tanımladığınız paroladır.
- "AppName" herhangi bir dizedir. SignalR, bu ada sahip bir Redis pub/sub kanalı oluşturur.
Örneğin:
GlobalHost.DependencyResolver.UseStackExchangeRedis("redis-server.cloudapp.net", 6379,
"MyStrongPassword1234", "ChatApp");
Uygulamayı Dağıtma ve Çalıştırma
SignalR uygulamasını dağıtmak için Windows Server örneklerinizi hazırlayın.
IIS rolünü ekleyin. WebSocket Protokolü de dahil olmak üzere "Uygulama Geliştirme" özelliklerini ekleyin.
Ayrıca Yönetim Hizmeti'ni de ekleyin ("Yönetim Araçları" altında listelenir).
Web Dağıtımı 3.0'ı yükleyin. IIS Yöneticisi'ni çalıştırdığınızda, Microsoft Web Platformu yüklemeniz istenir veya yükleyiciyi indirebilirsiniz. Platform Yükleyicisi'nde Web Dağıtımı'nı arayın ve Web Dağıtımı 3.0'ı yükleyin
Web Yönetim Hizmeti'nin çalıştığını denetleyin. Çalışmıyorsa, hizmeti başlatın. (Windows hizmetleri listesinde Web Yönetim Hizmeti'ni görmüyorsanız, IIS rolünü eklerken Yönetim Hizmeti'ni yüklediğinizden emin olun.)
Varsayılan olarak, Web Yönetim Hizmeti 8172 numaralı TCP bağlantı noktasını dinler. Windows Güvenlik Duvarı'nda, 8172 numaralı bağlantı noktasında TCP trafiğine izin vermek için yeni bir gelen kuralı oluşturun. Daha fazla bilgi için bkz . Güvenlik Duvarı Kurallarını Yapılandırma. (VM'leri Azure'da barındırıyorsanız, bunu doğrudan Azure portal yapabilirsiniz. Bkz. Sanal Makineye Uç Noktaları Ayarlama.)
Artık Visual Studio projesini geliştirme makinenizden sunucuya dağıtmaya hazırsınız. Çözüm Gezgini'da çözüme sağ tıklayın ve Yayımla'ya tıklayın.
Web dağıtımı hakkında daha ayrıntılı belgeler için bkz. Visual Studio ve ASP.NET için Web Dağıtımı İçerik Haritası.
Uygulamayı iki sunucuya dağıtırsanız, her örneği ayrı bir tarayıcı penceresinde açabilir ve her bir örneğin diğerinden SignalR iletileri aldığını görebilirsiniz. (Elbette, üretim ortamında iki sunucu bir yük dengeleyicinin arkasında durur.)
Redis'e gönderilen iletileri görmek istiyorsanız Redis ile yüklenen redis-cli istemcisini kullanabilirsiniz.
redis-cli -a password
SUBSCRIBE ChatApp