Bagikan melalui


Scaleout SignalR dengan Redis (SignalR 1.x)

oleh Patrick Fletcher

Peringatan

Dokumentasi ini bukan untuk versi terbaru SignalR. Lihatlah ASP.NET Core SignalR.

Dalam tutorial ini, Anda akan menggunakan Redis untuk mendistribusikan pesan di seluruh aplikasi SignalR yang disebarkan pada dua instans IIS terpisah.

Redis adalah penyimpanan kunci-nilai dalam memori. Ini juga mendukung sistem olahpesan dengan model terbitkan/berlangganan. Backplane SignalR Redis menggunakan fitur pub/sub untuk meneruskan pesan ke server lain.

Diagram yang mengilustrasikan hubungan antara Redis Server, yang berlangganan V M, komputer, yang kemudian menerbitkan V M ke Server Redis.

Untuk tutorial ini, Anda akan menggunakan tiga server:

  • Dua server yang menjalankan Windows, yang akan Anda gunakan untuk menyebarkan aplikasi SignalR.
  • Satu server yang menjalankan Linux, yang akan Anda gunakan untuk menjalankan Redis. Untuk cuplikan layar dalam tutorial ini, saya menggunakan Ubuntu 12.04 TLS.

Jika Anda tidak memiliki tiga server fisik untuk digunakan, Anda dapat membuat VM di Hyper-V. Opsi lain adalah membuat VM di Azure.

Meskipun tutorial ini menggunakan implementasi Redis resmi, ada juga port Windows Redis dari MSOpenTech. Penyiapan dan konfigurasi berbeda, tetapi jika tidak, langkah-langkahnya sama.

Catatan

Peluasan skala SignalR dengan Redis tidak mendukung kluster Redis.

Gambaran Umum

Sebelum kita sampai ke tutorial terperinci, berikut adalah gambaran umum singkat tentang apa yang akan Anda lakukan.

  1. Instal Redis dan mulai server Redis.

  2. Tambahkan paket NuGet ini ke aplikasi Anda:

  3. Membuat aplikasi SignalR.

  4. Tambahkan kode berikut ke Global.asax untuk mengonfigurasi backplane:

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

Ubuntu di Hyper-V

Dengan menggunakan Windows Hyper-V, Anda dapat dengan mudah membuat VM Ubuntu di Windows Server.

Unduh ISO Ubuntu dari http://www.ubuntu.com.

Di Hyper-V, tambahkan VM baru. Di langkah Sambungkan Hard Disk Virtual , pilih Buat hard disk virtual.

Cuplikan layar Wizard Komputer Virtual Baru memperlihatkan panel Sambungkan Hard Disk Virtual dan bidang Nama sedang disorot.

Di langkah Opsi Penginstalan , pilih File gambar (.iso), klik Telusuri, dan telusuri ke ISO penginstalan Ubuntu.

Cuplikan layar Wizard Komputer Virtual Baru dengan panel Opsi Penginstalan dan opsi File Gambar sedang disorot.

Instal Redis

Ikuti langkah-langkah di http://redis.io/download untuk mengunduh dan membangun Redis.

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

Ini membangun biner Redis di src direktori.

Secara default, Redis tidak memerlukan kata sandi. Untuk mengatur kata sandi, edit redis.conf file , yang terletak di direktori akar kode sumber. (Buat salinan cadangan file sebelum Anda mengeditnya!) Tambahkan direktif berikut ke redis.conf:

requirepass YourStrongPassword1234

Sekarang mulai server Redis:

src/redis-server redis.conf

Cuplikan layar jendela server Azure User Redis, memperlihatkan informasi server termasuk kapan server dimulai dan status memori.

Buka port 6379, yang merupakan port default yang didengarkan Redis. (Anda dapat mengubah nomor port dalam file konfigurasi.)

Membuat Aplikasi SignalR

Buat aplikasi SignalR dengan mengikuti salah satu tutorial berikut:

Selanjutnya, kita akan memodifikasi aplikasi obrolan untuk mendukung scaleout dengan Redis. Pertama, tambahkan paket SignalR.Redis NuGet ke proyek Anda. Di Visual Studio, dari menu Alat , pilih Manajer Paket NuGet, lalu pilih Konsol Manajer Paket. Di jendela Konsol Manajer Paket, masukkan perintah berikut:

Install-Package Microsoft.AspNet.SignalR.Redis

Selanjutnya, buka file Global.asax. Tambahkan kode berikut ke metode Application_Start :

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

    RouteTable.Routes.MapHubs();
}
  • "server" adalah nama server yang menjalankan Redis.
  • port adalah nomor port
  • "kata sandi" adalah kata sandi yang Anda tentukan dalam file redis.conf.
  • "AppName" adalah string apa pun. SignalR membuat saluran pub/sub Redis dengan nama ini.

Contohnya:

GlobalHost.DependencyResolver.UseRedis("redis-server.cloudapp.net", 6379,
    "MyStrongPassword1234", "ChatApp");

Menyebarkan dan Menjalankan Aplikasi

Siapkan instans Windows Server Anda untuk menyebarkan aplikasi SignalR.

Tambahkan peran IIS. Sertakan fitur "Pengembangan Aplikasi", termasuk Protokol WebSocket.

Cuplikan layar Wizard Tambahkan Peran dan Fitur dengan opsi Peran Server dan Protokol Soket Web yang disorot.

Sertakan juga Layanan Manajemen (tercantum di bawah "Alat Manajemen").

Cuplikan layar Wizard Tambahkan Peran dan Fitur dengan Peran Server dan opsi Skrip dan Alat Manajemen I I S disorot.

Instal Web Deploy 3.0. Saat Anda menjalankan IIS Manager, IIS Manager akan meminta Anda untuk menginstal Microsoft Web Platform, atau Anda dapat mengunduh alat penginstal. Di Penginstal Platform, cari Web Deploy dan instal Web Deploy 3.0

Cuplikan layar hasil pencarian Penginstal Platform Web 4 poin 5 dengan opsi Web Deploy 3 point 0 disorot.

Periksa apakah Layanan Manajemen Web sedang berjalan. Jika tidak, mulai layanan. (Jika Anda tidak melihat Layanan Manajemen Web dalam daftar layanan Windows, pastikan Anda menginstal Layanan Manajemen saat menambahkan peran IIS.)

Secara default, Layanan Manajemen Web mendengarkan port TCP 8172. Di Windows Firewall, buat aturan masuk baru untuk mengizinkan lalu lintas TCP pada port 8172. Untuk informasi selengkapnya, lihat Mengonfigurasi Aturan Firewall. (Jika Anda menghosting VM di Azure, Anda dapat melakukan ini langsung di portal Azure. Lihat Cara Menyiapkan Titik Akhir ke Komputer Virtual.)

Sekarang Anda siap untuk menyebarkan proyek Visual Studio dari komputer pengembangan Anda ke server. Di Penjelajah Solusi, klik kanan solusi dan klik Terbitkan.

Untuk dokumentasi selengkapnya tentang penyebaran web, lihat Peta Konten Penyebaran Web untuk Visual Studio dan ASP.NET.

Jika Anda menyebarkan aplikasi ke dua server, Anda dapat membuka setiap instans di jendela browser terpisah dan melihat bahwa mereka masing-masing menerima pesan SignalR dari yang lain. (Tentu saja, di lingkungan produksi, kedua server akan duduk di belakang load balancer.)

Cuplikan layar pesan Signal R ditampilkan di browser web Internet Explorer, menampilkan layar Indeks.

Jika Anda ingin melihat pesan yang dikirim ke Redis, Anda dapat menggunakan klien redis-cli , yang diinstal dengan Redis.

redis-cli -a password
SUBSCRIBE ChatApp

Cuplikan layar output Pengguna Azure, yang menampilkan informasi untuk semua pesan terkirim dan kode yang disertai.