Menggunakan Azure SignalR Service
Artikel ini menunjukkan cara menggunakan SDK di sisi server aplikasi untuk menyambungkan ke SignalR Service saat Anda menggunakan SignalR di server aplikasi Anda.
Membuat instans Azure SignalR Service
Ikuti Mulai Cepat: Gunakan templat ARM untuk menyebarkan Azure SignalR untuk membuat instans layanan SignalR.
Untuk ASP.NET Core SignalR
Pasang SDK
Jalankan perintah untuk menginstal SignalR Service SDK ke proyek ASP.NET Core Anda.
dotnet add package Microsoft.Azure.SignalR
Di kelas Anda Startup
, gunakan SignalR Service SDK sebagai cuplikan kode berikut.
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR()
.AddAzureSignalR();
}
public void Configure(IApplicationBuilder app)
{
app.UseEndpoints(routes =>
{
routes.MapHub<YourHubClass>("/path_for_your_hub");
});
}
Mengonfigurasi string koneksi
Ada dua pendekatan untuk mengonfigurasi string koneksi SignalR Service di aplikasi Anda.
Atur variabel lingkungan dengan nama
Azure:SignalR:ConnectionString
atauAzure__SignalR__ConnectionString
.- Di Azure App Service, masukkan ke pengaturan aplikasi.
Teruskan string koneksi sebagai parameter .
AddAzureSignalR()
services.AddSignalR() .AddAzureSignalR("<replace with your connection string>");
or
services.AddSignalR() .AddAzureSignalR(options => options.ConnectionString = "<replace with your connection string>");
Mengonfigurasi opsi
Ada beberapa opsi yang dapat Anda sesuaikan saat menggunakan Azure SignalR Service SDK.
ConnectionString
- Nilai default adalah
Azure:SignalR:ConnectionString
connectionString
atauappSetting
dalamweb.config
file. - Ini dapat dikonfigurasi ulang, tetapi pastikan nilainya TIDAK dikodekan secara permanen.
InitialHubServerConnectionCount
- Nilai default
5
. - Opsi ini mengontrol jumlah awal koneksi per hub antara server aplikasi dan Azure SignalR Service. Biasanya simpan karena nilai default sudah cukup. Selama runtime, SDK mungkin memulai koneksi server baru untuk penyetelan performa atau penyeimbangan beban. Ketika Anda memiliki sejumlah besar klien, Anda dapat memberinya jumlah yang lebih besar untuk throughput yang lebih baik. Misalnya, jika Anda memiliki total 100.000 klien, jumlah koneksi dapat ditingkatkan menjadi
10
atau15
.
MaxHubServerConnectionCount
- Nilai default
null
. - Opsi ini mengontrol jumlah maksimum koneksi yang diizinkan per hub antara server aplikasi dan Azure SignalR Service. Selama runtime, SDK mungkin memulai koneksi server baru untuk penyetelan performa atau penyeimbangan beban. Secara default, koneksi server baru dimulai kapan pun diperlukan. Ketika jumlah koneksi server maksimum yang diizinkan dikonfigurasi, SDK tidak memulai koneksi baru ketika jumlah koneksi server mencapai batas.
ApplicationName
- Nilai default
null
. - Opsi ini dapat berguna ketika Anda ingin berbagi instans Azure SignalR yang sama untuk server aplikasi yang berbeda yang berisi nama hub yang sama. Jika tidak diatur, semua server aplikasi yang terhubung dianggap sebagai instans dari aplikasi yang sama.
ClaimsProvider
- Nilai default
null
. - Opsi ini mengontrol klaim apa yang ingin Anda kaitkan dengan koneksi klien.
Ini digunakan ketika Service SDK menghasilkan token akses untuk klien dalam permintaan negosiasi klien.
Secara default, semua klaim dari
HttpContext.User
permintaan yang dinegosiasikan dicadangkan. Mereka dapat diakses diHub.Context.User
. - Biasanya Anda harus membiarkan opsi ini apa adanya. Pastikan Anda memahami apa yang terjadi sebelum menyesuaikannya.
AccessTokenLifetime
- Nilai default
1 hour
. - Opsi ini mengontrol masa pakai token akses yang valid, yang dihasilkan SDK Layanan untuk setiap klien. Token akses dikembalikan sebagai respons terhadap permintaan negosiasi klien.
- Ketika
ServerSentEvent
atauLongPolling
digunakan sebagai transportasi, koneksi klien akan ditutup karena kegagalan autentikasi setelah waktu kedaluwarsa. Anda dapat meningkatkan nilai ini untuk menghindari pemutusan sambungan klien.
AccessTokenAlgorithm
- Nilai defaultnya adalah
HS256
- Opsi ini menyediakan pilihan
SecurityAlgorithms
saat menghasilkan token akses. Sekarang nilai opsional yang didukung adalahHS256
danHS512
. Perhatikan bahwaHS512
lebih aman tetapi token yang dihasilkan relatif lebih panjang daripada yang menggunakanHS256
.
ServerStickyMode
- Nilai default
Disabled
. - Opsi ini menentukan mode untuk server lengket. Ketika klien dirutekan ke server yang pertama kali dinegosiasikan dengannya, kami menyebutnya server lengket.
- Dalam skenario terdistribusi, mungkin ada beberapa server aplikasi yang terhubung ke satu instans Azure SignalR. Seperti yang dijelaskan oleh internal koneksi klien, klien terlebih dahulu bernegosiasi dengan server aplikasi, lalu mengalihkan ke Azure SignalR untuk membuat koneksi persisten. Azure SignalR kemudian menemukan satu server aplikasi untuk melayani klien, seperti yang dijelaskan Data Transportasi antara klien dan server .
- Ketika
Disabled
, klien merutekan ke server aplikasi acak. Secara umum, server aplikasi memiliki koneksi klien yang seimbang dengan mode ini. Jika skenario Anda adalah siaran atau pengiriman grup, gunakan opsi default ini sudah cukup. - Ketika
Preferred
, Azure SignalR mencoba menemukan server aplikasi yang pertama kali dinegosiasikan klien dengan cara yang tidak diperlukan biaya lain atau perutean global. Yang satu ini dapat berguna ketika skenario Anda dikirim ke koneksi*. Kirim ke koneksi dapat memiliki performa yang lebih baik dan latensi yang lebih rendah ketika pengirim dan penerima dirutekan ke server aplikasi yang sama. - Ketika
Required
, Azure SignalR selalu mencoba menemukan server aplikasi yang pertama kali dinegosiasikan dengan klien. Opsi ini dapat berguna ketika beberapa konteks klien diambil darinegotiate
langkah dan disimpan dalam memori, lalu digunakan di dalamHub
s. Namun, opsi ini mungkin memiliki kelemahan performa karena mengharuskan Azure SignalR untuk mengambil upaya lain untuk menemukan server aplikasi khusus ini secara global, dan untuk menjaga perutean lalu lintas secara global antara klien dan server.
- Ketika
GracefulShutdown
GracefulShutdown.Mode
- Nilai defaultnya adalah
Off
- Opsi ini menentukan perilaku setelah server aplikasi menerima SIGINT (CTRL + C).
- Ketika diatur ke
WaitForClientsClose
, alih-alih segera menghentikan server, kami menghapusnya dari Azure SignalR Service untuk mencegah koneksi klien baru ditetapkan ke server ini. - Ketika diatur ke
MigrateClients
, selain itu, kami mencoba memigrasikan koneksi klien ke server lain yang valid. Migrasi akan dipicu hanya setelah pesan dikirimkan.OnConnected
danOnDisconnected
dipicu ketika koneksi dimigrasikan masuk/keluar.IConnectionMigrationFeature
dapat membantu Anda mengidentifikasi apakah koneksi dimigrasikan masuk/keluar.- Lihat kode sampel kami untuk penggunaan detail.
GracefulShutdown.Timeout
- Nilai defaultnya adalah
30 seconds
- Opsi ini menentukan waktu terpanjang dalam menunggu klien ditutup/dimigrasikan.
ServiceScaleTimeout
- Nilai defaultnya adalah
5 minutes
- Opsi ini menentukan waktu terpanjang dalam menunggu titik akhir layanan penskalaan dinamis, yang memengaruhi klien online minimal. Biasanya skala dinamis antara server aplikasi tunggal dan titik akhir layanan dapat diselesaikan dalam hitung detik, sambil mempertimbangkan apakah Anda memiliki beberapa server aplikasi dan beberapa titik akhir layanan dengan jitter jaringan dan ingin memastikan stabilitas klien, Anda dapat mengonfigurasi nilai ini sesuai.
MaxPollIntervalInSeconds
- Nilai defaultnya adalah
5
- Opsi ini menentukan interval polling maks yang diizinkan untuk
LongPolling
koneksi di Azure SignalR Service. Jika permintaan polling berikutnya tidak masuk dalamMaxPollIntervalInSeconds
, Azure SignalR Service membersihkan koneksi klien. - Nilainya terbatas pada
[1, 300]
.
TransportTypeDetector
- Nilai default: Semua transportasi diaktifkan.
- Opsi ini menentukan fungsi untuk menyesuaikan transportasi yang dapat digunakan klien untuk mengirim permintaan HTTP.
- Gunakan opsi ini alih-alih
HttpConnectionDispatcherOptions.Transports
mengonfigurasi transportasi.
Sampel
Anda dapat mengonfigurasi opsi di atas seperti kode sampel berikut.
services.AddSignalR()
.AddAzureSignalR(options =>
{
options.InitialHubServerConnectionCount = 10;
options.AccessTokenLifetime = TimeSpan.FromDays(1);
options.ClaimsProvider = context => context.User.Claims;
options.GracefulShutdown.Mode = GracefulShutdownMode.WaitForClientsClose;
options.GracefulShutdown.Timeout = TimeSpan.FromSeconds(10);
options.TransportTypeDetector = httpContext => AspNetCore.Http.Connections.HttpTransportType.WebSockets | AspNetCore.Http.Connections.HttpTransportType.LongPolling;
});
Untuk signalR ASP.NET warisan
Catatan
Jika ini adalah pertama kalinya Anda mencoba SignalR, kami sarankan Anda menggunakan ASP.NET Core SignalR, lebih sederhana, lebih dapat diandalkan, dan lebih mudah digunakan.
Pasang SDK
Instal SignalR Service SDK ke proyek ASP.NET Anda dengan Package Manager Console:
Install-Package Microsoft.Azure.SignalR.AspNet
Di kelas Anda Startup
, gunakan SignalR Service SDK sebagai cuplikan kode berikut, ganti MapSignalR()
ke MapAzureSignalR({your_applicationName})
. Ganti {YourApplicationName}
ke nama aplikasi Anda, ini adalah nama unik untuk membedakan aplikasi ini dengan aplikasi Anda yang lain. Anda dapat this.GetType().FullName
menggunakan sebagai nilai.
public void Configuration(IAppBuilder app)
{
app.MapAzureSignalR(this.GetType().FullName);
}
Mengonfigurasi string koneksi
Atur string koneksi dalam web.config
file, ke bagian connectionStrings
:
<configuration>
<connectionStrings>
<add name="Azure:SignalR:ConnectionString" connectionString="Endpoint=...;AccessKey=..."/>
</connectionStrings>
...
</configuration>
Mengonfigurasi opsi
Ada beberapa opsi yang dapat Anda sesuaikan saat menggunakan Azure SignalR Service SDK.
ConnectionString
- Nilai default adalah
Azure:SignalR:ConnectionString
connectionString
atauappSetting
dalamweb.config
file. - Ini dapat dikonfigurasi ulang, tetapi pastikan nilainya TIDAK dikodekan secara permanen.
InitialHubServerConnectionCount
- Nilai default
5
. - Opsi ini mengontrol jumlah awal koneksi per hub antara server aplikasi dan Azure SignalR Service. Biasanya simpan karena nilai default sudah cukup. Selama runtime, SDK mungkin memulai koneksi server baru untuk penyetelan performa atau penyeimbangan beban. Ketika Anda memiliki sejumlah besar klien, Anda dapat memberinya jumlah yang lebih besar untuk throughput yang lebih baik. Misalnya, jika Anda memiliki total 100.000 klien, jumlah koneksi dapat ditingkatkan menjadi
10
atau15
.
MaxHubServerConnectionCount
- Nilai default
null
. - Opsi ini mengontrol jumlah maksimum koneksi yang diizinkan per hub antara server aplikasi dan Azure SignalR Service. Selama runtime, SDK mungkin memulai koneksi server baru untuk penyetelan performa atau penyeimbangan beban. Secara default, koneksi server baru dimulai kapan pun diperlukan. Ketika jumlah koneksi server maksimum yang diizinkan dikonfigurasi, SDK tidak memulai koneksi baru ketika jumlah koneksi server mencapai batas.
ApplicationName
- Nilai default
null
. - Opsi ini dapat berguna ketika Anda ingin berbagi instans Azure SignalR yang sama untuk server aplikasi yang berbeda yang berisi nama hub yang sama. Jika tidak diatur, semua server aplikasi yang terhubung dianggap sebagai instans dari aplikasi yang sama.
ClaimProvider
- Nilai default
null
. - Opsi ini mengontrol klaim apa yang ingin Anda kaitkan dengan koneksi klien.
Ini digunakan ketika Service SDK menghasilkan token akses untuk klien dalam permintaan negosiasi klien.
Secara default, semua klaim dari
IOwinContext.Authentication.User
permintaan yang dinegosiasikan dicadangkan. - Biasanya Anda harus membiarkan opsi ini apa adanya. Pastikan Anda memahami apa yang terjadi sebelum menyesuaikannya.
AccessTokenLifetime
- Nilai default
1 hour
. - Opsi ini mengontrol masa pakai token akses yang valid, yang dihasilkan SDK Layanan untuk setiap klien. Token akses dikembalikan sebagai respons terhadap permintaan negosiasi klien.
- Ketika
ServerSentEvent
atauLongPolling
digunakan sebagai transportasi, koneksi klien akan ditutup karena kegagalan autentikasi setelah waktu kedaluwarsa. Anda dapat meningkatkan nilai ini untuk menghindari pemutusan sambungan klien.
AccessTokenAlgorithm
- Nilai defaultnya adalah
HS256
- Opsi ini menyediakan pilihan
SecurityAlgorithms
saat menghasilkan token akses. Sekarang nilai opsional yang didukung adalahHS256
danHS512
. Perhatikan bahwaHS512
lebih aman tetapi token yang dihasilkan relatif lebih panjang daripada yang menggunakanHS256
.
ServerStickyMode
- Nilai default
Disabled
. - Opsi ini menentukan mode untuk server lengket. Ketika klien dirutekan ke server yang pertama kali dinegosiasikan dengannya, kami menyebutnya server lengket.
- Dalam skenario terdistribusi, mungkin ada beberapa server aplikasi yang terhubung ke satu instans Azure SignalR. Seperti yang dijelaskan oleh internal koneksi klien, klien terlebih dahulu bernegosiasi dengan server aplikasi, lalu mengalihkan ke Azure SignalR untuk membuat koneksi persisten. Azure SignalR kemudian menemukan satu server aplikasi untuk melayani klien, seperti yang dijelaskan Data Transportasi antara klien dan server .
- Ketika
Disabled
, klien merutekan ke server aplikasi acak. Secara umum, server aplikasi memiliki koneksi klien yang seimbang dengan mode ini. Jika skenario Anda adalah siaran atau pengiriman grup, gunakan opsi default ini sudah cukup. - Ketika
Preferred
, Azure SignalR mencoba menemukan server aplikasi yang pertama kali dinegosiasikan klien dengan cara yang tidak diperlukan biaya lain atau perutean global. Yang satu ini dapat berguna ketika skenario Anda dikirim ke koneksi*. Kirim ke koneksi dapat memiliki performa yang lebih baik dan latensi yang lebih rendah ketika pengirim dan penerima dirutekan ke server aplikasi yang sama. - Ketika
Required
, Azure SignalR selalu mencoba menemukan server aplikasi yang pertama kali dinegosiasikan dengan klien. Opsi ini dapat berguna ketika beberapa konteks klien diambil darinegotiate
langkah dan disimpan dalam memori, lalu digunakan di dalamHub
s. Namun, opsi ini mungkin memiliki kelemahan performa karena mengharuskan Azure SignalR untuk mengambil upaya lain untuk menemukan server aplikasi khusus ini secara global, dan untuk menjaga perutean lalu lintas secara global antara klien dan server.
- Ketika
MaxPollIntervalInSeconds
- Nilai defaultnya adalah
5
- Opsi ini menentukan waktu diam maksimum yang diizinkan untuk koneksi tidak aktif di Azure SignalR Service. Dalam ASP.NET SignalR, ini berlaku untuk jenis transportasi polling panjang atau koneksi ulang. Jika permintaan atau
/poll
berikutnya/reconnect
tidak masuk,MaxPollIntervalInSeconds
Azure SignalR Service akan membersihkan koneksi klien. - Nilainya terbatas pada
[1, 300]
.
Sampel
Anda dapat mengonfigurasi opsi di atas seperti kode sampel berikut.
app.Map("/signalr",subApp => subApp.RunAzureSignalR(this.GetType().FullName, new HubConfiguration(), options =>
{
options.InitialHubServerConnectionCount = 1;
options.AccessTokenLifetime = TimeSpan.FromDays(1);
options.ClaimProvider = context => context.Authentication?.User.Claims;
}));
Peluasan skala server aplikasi
Dengan Azure SignalR Service, koneksi persisten dilepas dari server aplikasi sehingga Anda dapat fokus pada penerapan logika bisnis Anda di kelas hub. Tetapi Anda masih perlu menskalakan server aplikasi untuk performa yang lebih baik saat menangani koneksi klien besar-besaran. Di bawah ini adalah beberapa tips untuk menskalakan server aplikasi.
- Beberapa server aplikasi dapat terhubung ke instans Azure SignalR Service yang sama.
- Jika Anda ingin berbagi instans Azure SignalR yang sama untuk aplikasi yang berbeda yang berisi nama hub yang sama, atur dengan opsi ApplicationName yang berbeda. Jika tidak diatur, semua server aplikasi yang terhubung dianggap sebagai instans dari aplikasi yang sama.
- Selama opsi ApplicationName dan nama kelas hub sama, koneksi dari server aplikasi yang berbeda dikelompokkan di hub yang sama.
- Setiap koneksi klien hanya dibuat di salah satu server aplikasi, dan pesan dari klien tersebut hanya dikirim ke server aplikasi yang sama. Jika Anda ingin mengakses informasi klien secara global (dari semua server aplikasi), Anda harus menggunakan beberapa penyimpanan terpusat untuk menyimpan informasi klien dari semua server aplikasi.
Langkah berikutnya
Dalam artikel ini, Anda mempelajari cara menggunakan SignalR Service di aplikasi Anda. Periksa artikel berikut untuk mempelajari selengkapnya tentang SignalR Service.