Redis ile SignalR Ölçeğini Genişletme (SignalR 1.x)

Patrick Fletcher tarafından

Uyarı

Bu belgeler SignalR'nin en son sürümüne yönelik değildir. SignalR ASP.NET Core göz atın.

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.

Redis Server arasındaki ilişkiyi gösteren diyagram; V Ms'lere, bilgisayarlara abone olur ve ardından V Ms'yi Redis Sunucuları'na yayımlar.

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.

  1. Redis'i yükleyin ve Redis sunucusunu başlatın.

  2. Bu NuGet paketlerini uygulamanıza ekleyin:

  3. SignalR uygulaması oluşturun.

  4. Arka düzlemi yapılandırmak için Global.asax'a aşağıdaki kodu ekleyin:

    protected void Application_Start()
    {
        GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName");
    
        RouteTable.Routes.MapHubs();
        // ...
    }
    

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.

Sanal Sabit Diske Bağlan bölmesinin ve Ad alanının vurgulandığını gösteren Yeni Sanal Makine Sihirbazı'nın ekran görüntüsü.

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.

Yükleme Seçenekleri bölmesi ve Görüntü Dosyası seçeneğinin vurgulandığı Yeni Sanal Makine Sihirbazı'nın ekran görüntüsü.

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.confekleyin:

requirepass YourStrongPassword1234

Şimdi Redis sunucusunu başlatın:

src/redis-server redis.conf

Sunucunun ne zaman başlatıldığı ve bellek durumu gibi sunucu bilgilerini gösteren Azure User Redis sunucu penceresinin ekran görüntüsü.

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 SignalR.Redis NuGet paketini projenize ekleyin. 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.Redis

Ardından Global.asax dosyasını açın. Application_Start yöntemine aşağıdaki kodu ekleyin:

protected void Application_Start()
{
    GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName");

    RouteTable.Routes.MapHubs();
}
  • "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.UseRedis("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.

Sunucu Rolleri ve Web Yuvası Protokolü seçeneklerinin vurgulandığı Rol ve Özellik Ekleme Sihirbazı'nın ekran görüntüsü.

Ayrıca Yönetim Hizmeti'ni de ekleyin ("Yönetim Araçları" altında listelenir).

Sunucu Rolleri ve I S Yönetim Betikleri ve Araçları seçeneklerinin vurgulandığı Rol ve Özellik Ekleme Sihirbazı'nın ekran görüntüsü.

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 Dağıtımı 3 nokta 0 seçeneğinin vurgulandığı Web Platformu Yükleyicisi 4 nokta 5 arama sonuçları ekranının ekran görüntüsü.

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.)

Internet Explorer web tarayıcısında görüntülenen Signal R iletilerinin dizin ekranını gösteren ekran görüntüsü.

Redis'e gönderilen iletileri görmek istiyorsanız Redis ile yüklenen redis-cli istemcisini kullanabilirsiniz.

redis-cli -a password
SUBSCRIBE ChatApp

Gönderilen tüm iletilerin ve eşlik eden kodun bilgilerini görüntüleyen Azure Kullanıcı çıkış ekranının ekran görüntüsü.