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.
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.
Instal Redis dan mulai server Redis.
Tambahkan paket NuGet ini ke aplikasi Anda:
Membuat aplikasi SignalR.
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.
Di langkah Opsi Penginstalan , pilih File gambar (.iso), klik Telusuri, dan telusuri ke ISO penginstalan Ubuntu.
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
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.
Sertakan juga Layanan Manajemen (tercantum di bawah "Alat Manajemen").
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
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.)
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