Bagikan melalui


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 atau Azure__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 atau appSetting dalam web.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 atau 15.

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 di Hub.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 atau LongPolling 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 adalah HS256 dan HS512. Perhatikan bahwa HS512 lebih aman tetapi token yang dihasilkan relatif lebih panjang daripada yang menggunakan HS256.

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 dari negotiate langkah dan disimpan dalam memori, lalu digunakan di dalam Hubs. 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.

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 dan OnDisconnected 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 dalam MaxPollIntervalInSeconds, 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 atau appSetting dalam web.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 atau 15.

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 atau LongPolling 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 adalah HS256 dan HS512. Perhatikan bahwa HS512 lebih aman tetapi token yang dihasilkan relatif lebih panjang daripada yang menggunakan HS256.

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 dari negotiate langkah dan disimpan dalam memori, lalu digunakan di dalam Hubs. 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.

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, MaxPollIntervalInSecondsAzure 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.