Barındırma ve dağıtma Blazor Server
Ana bilgisayar yapılandırma değerleri
Blazor Server uygulamalar genel ana bilgisayar yapılandırma değerlerinikabul edebilir.
Dağıtım
Blazor Server barındırma modelininkullanımı, Blazor sunucuda bir ASP.NET Core uygulamasının içinden yürütülür. Kullanıcı Arabirimi güncelleştirmeleri, olay işleme ve JavaScript çağrıları bir bağlantı üzerinden işlenir SignalR .
ASP.NET Core uygulaması barındırabilen bir web sunucusu gerekiyor. Visual Studio, Blazor Server uygulama proje şablonunu ( blazorserver komut kullanılırken şablon) içerir dotnet new . Proje şablonları hakkında daha fazla bilgi için Blazor bkz BlazorASP.NET Core proje yapısı ..
Ölçeklenebilirlik
Bir uygulama için kullanılabilir altyapıyı en iyi şekilde kullanmasını sağlamak üzere bir dağıtım planlayın Blazor Server . Uygulama ölçeklenebilirliğini karşılamak için aşağıdaki kaynaklara bakın Blazor Server :
- Uygulamaların temelleri Blazor Server
- Güvenlik açıkları için tehdit azaltma ASP.NET Core Blazor Server
Dağıtım sunucusu
Tek bir sunucunun ölçeklenebilirliğini değerlendirirken (ölçeği büyütme), bir uygulama için kullanılabilir olan bellek büyük olasılıkla uygulamanın kullanıcı talebi arttıkça arttırabileceği ilk kaynaktır. Sunucudaki kullanılabilir bellek şunları etkiler:
- Bir sunucunun destekleyebileceği etkin devre sayısı.
- İstemcide UI gecikme süresi.
Güvenli ve ölçeklenebilir sunucu uygulamaları oluşturma hakkında yönergeler için Blazor bkz Güvenlik açıkları için tehdit azaltma ASP.NET Core Blazor Server ..
Her bağlantı hattı en düşük Merhaba Dünya stilinde bir uygulama için YAKLAŞıK 250 KB bellek kullanır. Bir devrenin boyutu, uygulamanın koduna ve her bileşenle ilişkili durum bakım gereksinimlerine bağlıdır. Uygulama ve altyapınız için geliştirme sırasında kaynak taleplerini ölçmenizi öneririz, ancak aşağıdaki taban çizgisi, dağıtım hedefini planlamada bir başlangıç noktası olabilir: uygulamanızın 5.000 eşzamanlı kullanıcı desteklemesini istiyorsanız, en az 1,3 GB sunucu belleğini uygulamaya (veya Kullanıcı başına ~ 273 KB) göre bütçeleme yapmayı düşünün.
SignalR yapılandırmada
Blazor Serveruygulamalar tarayıcıyla iletişim kurmak için ASP.NET Core SignalR kullanır. SignalR uygulamasının barındırma ve ölçeklendirme koşulları uygulamalar için geçerlidir Blazor Server .
Blazor SignalR daha düşük gecikme süresi, daha iyi güvenilirlik ve geliştirilmiş güvenliknedeniyle taşıma olarak WebSockets kullanırken en iyi şekilde işe yarar. Uzun yoklama , SignalR WebSockets kullanılamadığında veya uygulama açıkça uzun yoklamayı kullanacak şekilde yapılandırıldığında kullanılır. Azure App Service dağıtım sırasında, uygulamayı hizmetin Azure portal ayarları içinde kullanmak üzere yapılandırın. Azure App Service için uygulamayı yapılandırma hakkında ayrıntılı bilgi için bkz. SignalR yayımlama yönergeleri.
Blazor Server Uzun yoklama kullanıldığını algılarsa bir konsol uyarısı yayar:
Uzun yoklama geri dönüş taşıması kullanılarak WebSockets üzerinden bağlantı kurulamadı. Bunun nedeni, bağlantıyı engelleyen bir VPN veya proxy olabilir. Bu sorunu gidermek için, adresini ziyaret edin https://aka.ms/blazor-server-using-fallback-long-polling .
Azure SignalR hizmeti
Uygulamalar için Azure SignalR hizmetini kullanmanızı öneririz Blazor Server . Hizmet, uygulamanın hub 'ı ile birlikte çalışarak Blazor Blazor Server çok sayıda eşzamanlı bağlantı için bir uygulamayı ölçeklendirmeye çalışır SignalR . Ayrıca, SignalR hizmetin küresel erişim ve yüksek performanslı veri merkezleri Coğrafya nedeniyle gecikme süresini azaltmaya önemli ölçüde yardımcı olur.
Önemli
WebSockets devre dışı bırakıldığında, Azure App Service http uzun yoklama kullanarak gerçek zamanlı bir bağlantıyı taklit eder. HTTP uzun yoklama, WebSockets etkinken, bir istemci-sunucu bağlantısının benzetimini yapmak için yoklama kullanmayan, önemli ölçüde daha yavaştır.
Blazor ServerAzure App Service için dağıtılan uygulamalar Için WebSockets kullanmanızı öneririz. Azure SignalR hizmeti varsayılan olarak WebSockets kullanır. Uygulama Azure SignalR hizmetini kullanmıyorsa, bkz SignalRAzure App Service için ASP.NET Core uygulaması yayımlama ..
Daha fazla bilgi için bkz.
Yapılandırma
Azure hizmeti için bir uygulamayı yapılandırmak üzere SignalR , uygulamanın prerendering sırasında aynı sunucuya geri yönlendirildiği yapışkan oturumları desteklemesi gerekir. ServerStickyModeSeçenek veya yapılandırma değeri olarak ayarlanır Required . Genellikle, bir uygulama aşağıdaki yaklaşımlardan birini kullanarak yapılandırmayı oluşturur:
Program.cs:builder.Services.AddSignalR().AddAzureSignalR(options => { options.ServerStickyMode = Microsoft.Azure.SignalR.ServerStickyMode.Required; });Yapılandırma (aşağıdaki yaklaşımlardan birini kullanın):
appsettings.jsoniçinde:"Azure:SignalR:StickyServerMode": "Required"App Service 'in > Azure Portal (ad:, değer:) yapılandırma uygulaması ayarları
Azure__SignalR__StickyServerModeRequired. Bu yaklaşım, Azure SignalR hizmetini teminediyorsanız uygulama için otomatik olarak benimsenmiştir.
Azure hizmetini sağlama SignalR
SignalRVisual Studio bir uygulama Için Azure hizmetini sağlamak üzere:
- uygulama için Visual Studio Azure Apps yayımlama profili oluşturun Blazor Server .
- Azure SignalR hizmet bağımlılığını profile ekleyin. Azure aboneliğinin uygulamaya atanacak önceden mevcut bir Azure SignalR hizmeti örneği yoksa, yeni bir hizmet örneği sağlamak için Yeni bir Azure SignalR hizmet örneği oluştur ' u seçin.
- Uygulamayı Azure’da yayımlama.
SignalRVisual Studio ' de Azure hizmetini sağlama, otomatik olarak yapışkan oturumları sağlar ve SignalR bağlantı dizesini app Service 'in yapılandırmasına ekler.
Azure App Service
Bu bölüm yalnızca Azure SignalR hizmetinikullanmayan uygulamalar için geçerlidir.
Azure SignalR hizmeti kullanılmazsa App Service uygulama isteği yönlendirme (ARR) benzeşimi ve WebSockets için yapılandırma gerektirir. İstemciler, WebSockets, Azure hizmetine değil, doğrudan uygulamaya bağlanır SignalR .
Uygulamayı yapılandırmak için aşağıdaki kılavuzu kullanın:
IIS
IIS kullanırken şunları etkinleştirin:
Kubernetes
Yapışkan oturumlar için aşağıdaki Kubernetes ek açıklamalarınıiçeren bir giriş tanımı oluşturun:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: <ingress-name>
annotations:
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "affinity"
nginx.ingress.kubernetes.io/session-cookie-expires: "14400"
nginx.ingress.kubernetes.io/session-cookie-max-age: "14400"
Nginx ile Linux
SignalRWebSockets 'in düzgün çalışması için, proxy 'nin Upgrade ve Connection üst bilgilerinin aşağıdaki değerlere ayarlandığını ve şu değerlere eşlenmiş olduğunu doğrulayın $connection_upgrade :
- Varsayılan olarak yükseltme üst bilgisi değeri.
closeYükseltme üst bilgisi eksik veya boş.
http {
map $http_upgrade $connection_upgrade {
default Upgrade;
'' close;
}
server {
listen 80;
server_name example.com *.example.com
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
Daha fazla bilgi için aşağıdaki makaleleri inceleyin:
- WebSocket proxy 'Si olarak NGıNX
- WebSocket proxy
- ngınx ile Linux üzerinde ana bilgisayar ASP.NET Core
Apache ile Linux
BlazorLinux 'Ta Apache 'nin arkasındaki bir uygulamayı barındırmak için, ProxyPass http ve WebSockets trafiği için yapılandırın.
Aşağıdaki örnekte:
- Kestrel Sunucu konak makinede çalışıyor.
- Uygulama, 5000 numaralı bağlantı noktasında trafiği dinler.
ProxyRequests On
ProxyPreserveHost On
ProxyPassMatch ^/_blazor/(.*) http://localhost:5000/_blazor/$1
ProxyPass /_blazor ws://localhost:5000/_blazor
ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/
Aşağıdaki modülleri etkinleştirin:
a2enmod proxy
a2enmod proxy_wstunnel
Tarayıcı konsolunda WebSockets hataları olup olmadığını denetleyin. Örnek hatalar:
- Firefox, ws://the-domain-name.tld/_blazor?id=XXX adresinde sunucuyla bağlantı kuramıyor.
- Hata: ' WebSockets ' taşıması başlatılamadı: hata: aktarımda bir hata oluştu.
- Hata: ' LongPolling ' taşıması başlatılamadı: TypeError: this. Transport tanımsız
- Hata: kullanılabilir aktarımlarla sunucuya bağlanılamıyor. WebSockets başarısız oldu
- Hata: bağlantı ' bağlı ' durumunda değilse veri gönderilemez.
Daha fazla bilgi için Apache belgelerinebakın.
Ölçü ağı gecikmesi
Aşağıdaki örnekte gösterildiği gibi, js birlikte çalışması ağ gecikmesini ölçmek için kullanılabilir:
@inject IJSRuntime JS
@if (latency is null)
{
<span>Calculating...</span>
}
else
{
<span>@(latency.Value.TotalMilliseconds)ms</span>
}
@code {
private DateTime startTime;
private TimeSpan? latency;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
startTime = DateTime.UtcNow;
var _ = await JS.InvokeAsync<string>("toString");
latency = DateTime.UtcNow - startTime;
StateHasChanged();
}
}
}
Makul bir kullanıcı arabirimi deneyimi için 250 MS veya daha az bir sürekli Kullanıcı arabirimi gecikme süresi önerilir.
Ana bilgisayar yapılandırma değerleri
Blazor Server uygulamalar genel ana bilgisayar yapılandırma değerlerinikabul edebilir.
Dağıtım
Blazor Server barındırma modelininkullanımı, Blazor sunucuda bir ASP.NET Core uygulamasının içinden yürütülür. Kullanıcı Arabirimi güncelleştirmeleri, olay işleme ve JavaScript çağrıları bir bağlantı üzerinden işlenir SignalR .
ASP.NET Core uygulaması barındırabilen bir web sunucusu gerekiyor. Visual Studio, Blazor Server uygulama proje şablonunu ( blazorserver komut kullanılırken şablon) içerir dotnet new . Proje şablonları hakkında daha fazla bilgi için Blazor bkz BlazorASP.NET Core proje yapısı ..
Ölçeklenebilirlik
Bir uygulama için kullanılabilir altyapıyı en iyi şekilde kullanmasını sağlamak üzere bir dağıtım planlayın Blazor Server . Uygulama ölçeklenebilirliğini karşılamak için aşağıdaki kaynaklara bakın Blazor Server :
- Uygulamaların temelleri Blazor Server
- Güvenlik açıkları için tehdit azaltma ASP.NET Core Blazor Server
Dağıtım sunucusu
Tek bir sunucunun ölçeklenebilirliğini değerlendirirken (ölçeği büyütme), bir uygulama için kullanılabilir olan bellek büyük olasılıkla uygulamanın kullanıcı talebi arttıkça arttırabileceği ilk kaynaktır. Sunucudaki kullanılabilir bellek şunları etkiler:
- Bir sunucunun destekleyebileceği etkin devre sayısı.
- İstemcide UI gecikme süresi.
Güvenli ve ölçeklenebilir sunucu uygulamaları oluşturma hakkında yönergeler için Blazor bkz Güvenlik açıkları için tehdit azaltma ASP.NET Core Blazor Server ..
Her bağlantı hattı en düşük Merhaba Dünya stilinde bir uygulama için YAKLAŞıK 250 KB bellek kullanır. Bir devrenin boyutu, uygulamanın koduna ve her bileşenle ilişkili durum bakım gereksinimlerine bağlıdır. Uygulama ve altyapınız için geliştirme sırasında kaynak taleplerini ölçmenizi öneririz, ancak aşağıdaki taban çizgisi, dağıtım hedefini planlamada bir başlangıç noktası olabilir: uygulamanızın 5.000 eşzamanlı kullanıcı desteklemesini istiyorsanız, en az 1,3 GB sunucu belleğini uygulamaya (veya Kullanıcı başına ~ 273 KB) göre bütçeleme yapmayı düşünün.
SignalR yapılandırmada
Blazor Serveruygulamalar SignalR tarayıcıyla iletişim kurmak için ASP.NET Core kullanır. SignalR uygulamasının barındırma ve ölçeklendirme koşulları uygulamalar için geçerlidir Blazor Server .
BlazorSignalRdaha düşük gecikme süresi, güvenilirlik ve güvenliknedeniyle taşıma olarak WebSockets kullanırken en iyi şekilde işe yarar. Uzun yoklama, SignalR WebSockets kullanılamadığında veya uygulama açıkça uzun yoklamayı kullanacak şekilde yapılandırıldığında kullanılır. Azure App Service dağıtım sırasında, uygulamayı hizmetin Azure portal ayarları içinde kullanmak üzere yapılandırın. Azure App Service için uygulamayı yapılandırma hakkında ayrıntılı bilgi için bkz. SignalR yayımlama yönergeleri.
Azure SignalR hizmeti
Uygulamalar için Azure SignalR hizmetini kullanmanızı öneririz Blazor Server . Hizmet, uygulamanın hub 'ı ile birlikte çalışarak Blazor Blazor Server çok sayıda eşzamanlı bağlantı için bir uygulamayı ölçeklendirmeye çalışır SignalR . Ayrıca, SignalR hizmetin küresel erişim ve yüksek performanslı veri merkezleri Coğrafya nedeniyle gecikme süresini azaltmaya önemli ölçüde yardımcı olur.
Önemli
WebSockets devre dışı bırakıldığında, Azure App Service http uzun yoklama kullanarak gerçek zamanlı bir bağlantıyı taklit eder. HTTP uzun yoklama, WebSockets etkinken, bir istemci-sunucu bağlantısının benzetimini yapmak için yoklama kullanmayan, önemli ölçüde daha yavaştır.
Blazor ServerAzure App Service için dağıtılan uygulamalar Için WebSockets kullanmanızı öneririz. Azure SignalR hizmeti varsayılan olarak WebSockets kullanır. Uygulama Azure SignalR hizmetini kullanmıyorsa, bkz SignalRAzure App Service için ASP.NET Core uygulaması yayımlama ..
Daha fazla bilgi için bkz.
Yapılandırma
Azure hizmeti için bir uygulamayı yapılandırmak üzere SignalR , uygulamanın prerendering sırasında aynı sunucuya geri yönlendirildiği yapışkan oturumları desteklemesi gerekir. ServerStickyModeSeçenek veya yapılandırma değeri olarak ayarlanır Required . Genellikle, bir uygulama aşağıdaki yaklaşımlardan birini kullanarak yapılandırmayı oluşturur:
Startup.ConfigureServices:services.AddSignalR().AddAzureSignalR(options => { options.ServerStickyMode = Microsoft.Azure.SignalR.ServerStickyMode.Required; });Yapılandırma (aşağıdaki yaklaşımlardan birini kullanın):
appsettings.jsoniçinde:"Azure:SignalR:StickyServerMode": "Required"App Service 'in > Azure Portal (ad:, değer:) yapılandırma uygulaması ayarları
Azure__SignalR__StickyServerModeRequired. Bu yaklaşım, Azure SignalR hizmetini teminediyorsanız uygulama için otomatik olarak benimsenmiştir.
Azure hizmetini sağlama SignalR
SignalRVisual Studio bir uygulama Için Azure hizmetini sağlamak üzere:
- uygulama için Visual Studio Azure Apps yayımlama profili oluşturun Blazor Server .
- Azure SignalR hizmet bağımlılığını profile ekleyin. Azure aboneliğinin uygulamaya atanacak önceden mevcut bir Azure SignalR hizmeti örneği yoksa, yeni bir hizmet örneği sağlamak için Yeni bir Azure SignalR hizmet örneği oluştur ' u seçin.
- Uygulamayı Azure’da yayımlama.
SignalRVisual Studio ' de Azure hizmetini sağlama, otomatik olarak yapışkan oturumları sağlar ve SignalR bağlantı dizesini app Service 'in yapılandırmasına ekler.
Azure App Service
Bu bölüm yalnızca Azure SignalR hizmetinikullanmayan uygulamalar için geçerlidir.
Azure SignalR hizmeti kullanılmazsa App Service uygulama isteği yönlendirme (ARR) benzeşimi ve WebSockets için yapılandırma gerektirir. İstemciler, WebSockets, Azure hizmetine değil, doğrudan uygulamaya bağlanır SignalR .
Uygulamayı yapılandırmak için aşağıdaki kılavuzu kullanın:
IIS
IIS kullanırken şunları etkinleştirin:
Kubernetes
Yapışkan oturumlar için aşağıdaki Kubernetes ek açıklamalarınıiçeren bir giriş tanımı oluşturun:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: <ingress-name>
annotations:
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "affinity"
nginx.ingress.kubernetes.io/session-cookie-expires: "14400"
nginx.ingress.kubernetes.io/session-cookie-max-age: "14400"
Nginx ile Linux
SignalRWebSockets 'in düzgün çalışması için, proxy 'nin Upgrade ve Connection üst bilgilerinin aşağıdaki değerlere ayarlandığını ve şu değerlere eşlenmiş olduğunu doğrulayın $connection_upgrade :
- Varsayılan olarak yükseltme üst bilgisi değeri.
closeYükseltme üst bilgisi eksik veya boş.
http {
map $http_upgrade $connection_upgrade {
default Upgrade;
'' close;
}
server {
listen 80;
server_name example.com *.example.com;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
Daha fazla bilgi için aşağıdaki makaleleri inceleyin:
- WebSocket proxy 'Si olarak NGıNX
- WebSocket proxy
- ngınx ile Linux üzerinde ana bilgisayar ASP.NET Core
Apache ile Linux
BlazorLinux 'Ta Apache 'nin arkasındaki bir uygulamayı barındırmak için, ProxyPass http ve WebSockets trafiği için yapılandırın.
Aşağıdaki örnekte:
- Kestrel Sunucu konak makinede çalışıyor.
- Uygulama, 5000 numaralı bağlantı noktasında trafiği dinler.
ProxyRequests On
ProxyPreserveHost On
ProxyPassMatch ^/_blazor/(.*) http://localhost:5000/_blazor/$1
ProxyPass /_blazor ws://localhost:5000/_blazor
ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/
Aşağıdaki modülleri etkinleştirin:
a2enmod proxy
a2enmod proxy_wstunnel
Tarayıcı konsolunda WebSockets hataları olup olmadığını denetleyin. Örnek hatalar:
- Firefox, ws://the-domain-name.tld/_blazor?id=XXX adresinde sunucuyla bağlantı kuramıyor.
- Hata: ' WebSockets ' taşıması başlatılamadı: hata: aktarımda bir hata oluştu.
- Hata: ' LongPolling ' taşıması başlatılamadı: TypeError: this. Transport tanımsız
- Hata: kullanılabilir aktarımlarla sunucuya bağlanılamıyor. WebSockets başarısız oldu
- Hata: bağlantı ' bağlı ' durumunda değilse veri gönderilemez.
Daha fazla bilgi için Apache belgelerinebakın.
Ölçü ağı gecikmesi
Aşağıdaki örnekte gösterildiği gibi, js birlikte çalışması ağ gecikmesini ölçmek için kullanılabilir:
@inject IJSRuntime JS
@if (latency is null)
{
<span>Calculating...</span>
}
else
{
<span>@(latency.Value.TotalMilliseconds)ms</span>
}
@code {
private DateTime startTime;
private TimeSpan? latency;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
startTime = DateTime.UtcNow;
var _ = await JS.InvokeAsync<string>("toString");
latency = DateTime.UtcNow - startTime;
StateHasChanged();
}
}
}
Makul bir kullanıcı arabirimi deneyimi için 250 MS veya daha az bir sürekli Kullanıcı arabirimi gecikme süresi önerilir.
Ana bilgisayar yapılandırma değerleri
Blazor Server uygulamalar genel ana bilgisayar yapılandırma değerlerinikabul edebilir.
Dağıtım
Blazor Server barındırma modelininkullanımı, Blazor sunucuda bir ASP.NET Core uygulamasının içinden yürütülür. Kullanıcı Arabirimi güncelleştirmeleri, olay işleme ve JavaScript çağrıları bir bağlantı üzerinden işlenir SignalR .
ASP.NET Core uygulaması barındırabilen bir web sunucusu gerekiyor. Visual Studio, Blazor Server uygulama proje şablonunu ( blazorserver komut kullanılırken şablon) içerir dotnet new . Proje şablonları hakkında daha fazla bilgi için Blazor bkz BlazorASP.NET Core proje yapısı ..
Ölçeklenebilirlik
Bir uygulama için kullanılabilir altyapıyı en iyi şekilde kullanmasını sağlamak üzere bir dağıtım planlayın Blazor Server . Uygulama ölçeklenebilirliğini karşılamak için aşağıdaki kaynaklara bakın Blazor Server :
- Uygulamaların temelleri Blazor Server
- Güvenlik açıkları için tehdit azaltma ASP.NET Core Blazor Server
Dağıtım sunucusu
Tek bir sunucunun ölçeklenebilirliğini değerlendirirken (ölçeği büyütme), bir uygulama için kullanılabilir olan bellek büyük olasılıkla uygulamanın kullanıcı talebi arttıkça arttırabileceği ilk kaynaktır. Sunucudaki kullanılabilir bellek şunları etkiler:
- Bir sunucunun destekleyebileceği etkin devre sayısı.
- İstemcide UI gecikme süresi.
Güvenli ve ölçeklenebilir sunucu uygulamaları oluşturma hakkında yönergeler için Blazor bkz Güvenlik açıkları için tehdit azaltma ASP.NET Core Blazor Server ..
Her bağlantı hattı en düşük Merhaba Dünya stilinde bir uygulama için YAKLAŞıK 250 KB bellek kullanır. Bir devrenin boyutu, uygulamanın koduna ve her bileşenle ilişkili durum bakım gereksinimlerine bağlıdır. Uygulama ve altyapınız için geliştirme sırasında kaynak taleplerini ölçmenizi öneririz, ancak aşağıdaki taban çizgisi, dağıtım hedefini planlamada bir başlangıç noktası olabilir: uygulamanızın 5.000 eşzamanlı kullanıcı desteklemesini istiyorsanız, en az 1,3 GB sunucu belleğini uygulamaya (veya Kullanıcı başına ~ 273 KB) göre bütçeleme yapmayı düşünün.
SignalR yapılandırmada
Blazor Serveruygulamalar SignalR tarayıcıyla iletişim kurmak için ASP.NET Core kullanır. SignalR uygulamasının barındırma ve ölçeklendirme koşulları uygulamalar için geçerlidir Blazor Server .
BlazorSignalRdaha düşük gecikme süresi, güvenilirlik ve güvenliknedeniyle taşıma olarak WebSockets kullanırken en iyi şekilde işe yarar. Uzun yoklama, SignalR WebSockets kullanılamadığında veya uygulama açıkça uzun yoklamayı kullanacak şekilde yapılandırıldığında kullanılır. Azure App Service dağıtım sırasında, uygulamayı hizmetin Azure portal ayarları içinde kullanmak üzere yapılandırın. Azure App Service için uygulamayı yapılandırma hakkında ayrıntılı bilgi için bkz. SignalR yayımlama yönergeleri.
Azure SignalR hizmeti
Uygulamalar için Azure SignalR hizmetini kullanmanızı öneririz Blazor Server . Hizmet, uygulamanın hub 'ı ile birlikte çalışarak Blazor Blazor Server çok sayıda eşzamanlı bağlantı için bir uygulamayı ölçeklendirmeye çalışır SignalR . Ayrıca, SignalR hizmetin küresel erişim ve yüksek performanslı veri merkezleri Coğrafya nedeniyle gecikme süresini azaltmaya önemli ölçüde yardımcı olur.
Önemli
WebSockets devre dışı bırakıldığında, Azure App Service http uzun yoklama kullanarak gerçek zamanlı bir bağlantıyı taklit eder. HTTP uzun yoklama, WebSockets etkinken, bir istemci-sunucu bağlantısının benzetimini yapmak için yoklama kullanmayan, önemli ölçüde daha yavaştır.
Blazor ServerAzure App Service için dağıtılan uygulamalar Için WebSockets kullanmanızı öneririz. Azure SignalR hizmeti varsayılan olarak WebSockets kullanır. Uygulama Azure SignalR hizmetini kullanmıyorsa, bkz SignalRAzure App Service için ASP.NET Core uygulaması yayımlama ..
Daha fazla bilgi için bkz.
Yapılandırma
Azure hizmeti için bir uygulamayı yapılandırmak üzere SignalR , uygulamanın prerendering sırasında aynı sunucuya geri yönlendirildiği yapışkan oturumları desteklemesi gerekir. ServerStickyModeSeçenek veya yapılandırma değeri olarak ayarlanır Required . Genellikle, bir uygulama aşağıdaki yaklaşımlardan birini kullanarak yapılandırmayı oluşturur:
Startup.ConfigureServices:services.AddSignalR().AddAzureSignalR(options => { options.ServerStickyMode = Microsoft.Azure.SignalR.ServerStickyMode.Required; });Yapılandırma (aşağıdaki yaklaşımlardan birini kullanın):
appsettings.jsoniçinde:"Azure:SignalR:StickyServerMode": "Required"App Service 'in > Azure Portal (ad:, değer:) yapılandırma uygulaması ayarları
Azure__SignalR__StickyServerModeRequired. Bu yaklaşım, Azure SignalR hizmetini teminediyorsanız uygulama için otomatik olarak benimsenmiştir.
Azure hizmetini sağlama SignalR
SignalRVisual Studio bir uygulama Için Azure hizmetini sağlamak üzere:
- uygulama için Visual Studio Azure Apps yayımlama profili oluşturun Blazor Server .
- Azure SignalR hizmet bağımlılığını profile ekleyin. Azure aboneliğinin uygulamaya atanacak önceden mevcut bir Azure SignalR hizmeti örneği yoksa, yeni bir hizmet örneği sağlamak için Yeni bir Azure SignalR hizmet örneği oluştur ' u seçin.
- Uygulamayı Azure’da yayımlama.
SignalRVisual Studio ' de Azure hizmetini sağlama, otomatik olarak yapışkan oturumları sağlar ve SignalR bağlantı dizesini app Service 'in yapılandırmasına ekler.
Azure App Service
Bu bölüm yalnızca Azure SignalR hizmetinikullanmayan uygulamalar için geçerlidir.
Azure SignalR hizmeti kullanılmazsa App Service uygulama isteği yönlendirme (ARR) benzeşimi ve WebSockets için yapılandırma gerektirir. İstemciler, WebSockets, Azure hizmetine değil, doğrudan uygulamaya bağlanır SignalR .
Uygulamayı yapılandırmak için aşağıdaki kılavuzu kullanın:
IIS
IIS kullanırken şunları etkinleştirin:
Kubernetes
Yapışkan oturumlar için aşağıdaki Kubernetes ek açıklamalarınıiçeren bir giriş tanımı oluşturun:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: <ingress-name>
annotations:
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "affinity"
nginx.ingress.kubernetes.io/session-cookie-expires: "14400"
nginx.ingress.kubernetes.io/session-cookie-max-age: "14400"
Nginx ile Linux
SignalRWebSockets 'in düzgün çalışması için, proxy 'nin Upgrade ve Connection üst bilgilerinin aşağıdaki değerlere ayarlandığını ve şu değerlere eşlenmiş olduğunu doğrulayın $connection_upgrade :
- Varsayılan olarak yükseltme üst bilgisi değeri.
closeYükseltme üst bilgisi eksik veya boş.
http {
map $http_upgrade $connection_upgrade {
default Upgrade;
'' close;
}
server {
listen 80;
server_name example.com *.example.com
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
Daha fazla bilgi için aşağıdaki makaleleri inceleyin:
- WebSocket proxy 'Si olarak NGıNX
- WebSocket proxy
- ngınx ile Linux üzerinde ana bilgisayar ASP.NET Core
Apache ile Linux
BlazorLinux 'Ta Apache 'nin arkasındaki bir uygulamayı barındırmak için, ProxyPass http ve WebSockets trafiği için yapılandırın.
Aşağıdaki örnekte:
- Kestrel Sunucu konak makinede çalışıyor.
- Uygulama, 5000 numaralı bağlantı noktasında trafiği dinler.
ProxyRequests On
ProxyPreserveHost On
ProxyPassMatch ^/_blazor/(.*) http://localhost:5000/_blazor/$1
ProxyPass /_blazor ws://localhost:5000/_blazor
ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/
Aşağıdaki modülleri etkinleştirin:
a2enmod proxy
a2enmod proxy_wstunnel
Tarayıcı konsolunda WebSockets hataları olup olmadığını denetleyin. Örnek hatalar:
- Firefox, ws://the-domain-name.tld/_blazor?id=XXX adresinde sunucuyla bağlantı kuramıyor.
- Hata: ' WebSockets ' taşıması başlatılamadı: hata: aktarımda bir hata oluştu.
- Hata: ' LongPolling ' taşıması başlatılamadı: TypeError: this. Transport tanımsız
- Hata: kullanılabilir aktarımlarla sunucuya bağlanılamıyor. WebSockets başarısız oldu
- Hata: bağlantı ' bağlı ' durumunda değilse veri gönderilemez.
Daha fazla bilgi için Apache belgelerinebakın.
Ölçü ağı gecikmesi
Aşağıdaki örnekte gösterildiği gibi, js birlikte çalışması ağ gecikmesini ölçmek için kullanılabilir:
@inject IJSRuntime JS
@if (latency is null)
{
<span>Calculating...</span>
}
else
{
<span>@(latency.Value.TotalMilliseconds)ms</span>
}
@code {
private DateTime startTime;
private TimeSpan? latency;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
startTime = DateTime.UtcNow;
var _ = await JS.InvokeAsync<string>("toString");
latency = DateTime.UtcNow - startTime;
StateHasChanged();
}
}
}
Makul bir kullanıcı arabirimi deneyimi için 250 MS veya daha az bir sürekli Kullanıcı arabirimi gecikme süresi önerilir.