Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Application Gateway har inbyggt stöd för WebSocket i alla gatewaystorlekar. Det finns inga inställningar som kan konfigureras av användaren för att selektivt aktivera eller inaktivera WebSocket-stöd.
WebSocket-protokollet som är standardiserat i RFC6455 möjliggör en fullständig dubbelsidig kommunikation mellan en server och en klient över en tidskrävande TCP-anslutning. Den här funktionen möjliggör en mer interaktiv kommunikation mellan webbservern och klienten, som kan vara dubbelriktad utan behov av avsökning som krävs i HTTP-baserade implementeringar. WebSocket har låg belastning till skillnad från HTTP och kan återanvända samma TCP-anslutning för flera begäranden/svar, vilket resulterar i en effektivare resursanvändning. WebSocket-protokoll är utformade för att fungera via traditionella HTTP-portar på 80 och 443. Application Gateway stöder upp till 30 000 samtidiga WS-anslutningar och 13 500 WSS-anslutningar per instans.
Du kan fortsätta att använda en HTTP-standardlyssnare på port 80 eller 443 för att ta emot WebSocket-trafik. WebSocket-trafik dirigeras sedan till den WebSocket-aktiverade serverdelsservern med hjälp av lämplig serverdelspool enligt reglerna för programgatewayen. Serverdelen måste svara på avsökningarna för programgatewayen, som beskrivs i avsnittet Översikt över hälsoavsökning. Hälsoavsökningar för programgatewayen är endast av typen HTTP/HTTPS. Varje serverdelsserver måste svara på HTTP-avsökningar för programgatewayen för att dirigera WebSocket-trafik till servern.
Den används i appar som drar nytta av snabb kommunikation i realtid, till exempel chatt, instrumentpanel och spelappar.
Hur fungerar WebSocket
För att upprätta en WebSocket-anslutning utbyts en specifik HTTP-baserad handskakning mellan klienten och servern. Om det lyckas "uppgraderas" protokollet på programnivå från HTTP till WebSockets med hjälp av den tidigare etablerade TCP-anslutningen. När detta inträffar är HTTP helt ute ur bilden; data kan skickas eller tas emot med hjälp av WebSocket-protokollet av båda slutpunkterna tills WebSocket-anslutningen har stängts.
Note
När en anslutning har uppgraderats till WebSocket, som en mellanhand/avslutande proxy, skickar Application Gateway helt enkelt de data som tas emot från klientdelen till serverdelen och vice versa, utan någon kontroll- eller manipulationsfunktion. Därför kan Web Application Firewall (WAF) inte parsa innehåll och utför inga inspektioner av sådana data. På samma sätt gäller inte alla manipulationer som sidhuvudomskrivningar, URL-omskrivningar eller åsidosättande värdnamn i serverdelsinställningarna när en WebSocket-anslutning har upprättats.
konfigurationselement för lyssnare
En befintlig HTTP-lyssnare kan användas för att stödja WebSocket-trafik. Följande kodfragment visar ett httpListeners element från en exempelmallfil. Du behöver både HTTP- och HTTPS-lyssnare för att stödja WebSocket och skydda WebSocket-trafik. På samma sätt kan du använda portalen eller Azure PowerShell för att skapa en programgateway med lyssnare på port 80 och 443 för att stödja WebSocket-trafik.
"httpListeners": [
{
"name": "appGatewayHttpsListener",
"properties": {
"FrontendIPConfiguration": {
"Id": "/subscriptions/{subscriptionId/resourceGroups/{resourceGroupName/providers/Microsoft.Network/applicationGateways/{applicationGatewayName/frontendIPConfigurations/DefaultFrontendPublicIP"
},
"FrontendPort": {
"Id": "/subscriptions/{subscriptionId/resourceGroups/{resourceGroupName/providers/Microsoft.Network/applicationGateways/{applicationGatewayName/frontendPorts/appGatewayFrontendPort443'"
},
"Protocol": "Https",
"SslCertificate": {
"Id": "/subscriptions/{subscriptionId/resourceGroups/{resourceGroupName/providers/Microsoft.Network/applicationGateways/{applicationGatewayName/sslCertificates/appGatewaySslCert1'"
},
}
},
{
"name": "appGatewayHttpListener",
"properties": {
"FrontendIPConfiguration": {
"Id": "/subscriptions/{subscriptionId/resourceGroups/{resourceGroupName/providers/Microsoft.Network/applicationGateways/{applicationGatewayName/frontendIPConfigurations/appGatewayFrontendIP'"
},
"FrontendPort": {
"Id": "/subscriptions/{subscriptionId/resourceGroups/{resourceGroupName/providers/Microsoft.Network/applicationGateways/{applicationGatewayName/frontendPorts/appGatewayFrontendPort80'"
},
"Protocol": "Http",
}
}
],
Konfiguration av BackendAddressPool, BackendHttpSetting och regel för routning
Använd en BackendAddressPool för att definiera en serverdelspool med WebSocket-aktiverade servrar. Definiera backendHttpSetting med serverdelsportarna 80 och 443. Tidsgränsvärdet för begäran i HTTP-inställningar gäller även för WebSocket-sessionen. Du behöver inte ändra routningsregeln, som kopplar lämplig lyssnare till motsvarande serverdelsadresspool.
"requestRoutingRules": [{
"name": "<ruleName1>",
"properties": {
"RuleType": "Basic",
"httpListener": {
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/httpListeners/appGatewayHttpsListener')]"
},
"backendAddressPool": {
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendAddressPools/ContosoServerPool')]"
},
"backendHttpSettings": {
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendHttpSettingsCollection/appGatewayBackendHttpSettings')]"
}
}
}, {
"name": "<ruleName2>",
"properties": {
"RuleType": "Basic",
"httpListener": {
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/httpListeners/appGatewayHttpListener')]"
},
"backendAddressPool": {
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendAddressPools/ContosoServerPool')]"
},
"backendHttpSettings": {
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendHttpSettingsCollection/appGatewayBackendHttpSettings')]"
}
}
}]
Note
Kontrollera att timeout-värdet är större än det serverdefinierade ping-/pong-intervallet för att undvika timeout-fel innan en ping skickas från klienten. Ett typiskt värde för en WebSocket är 20 sekunder, så till exempel säkerställer ett timeout-värde på 40 sekunder att gatewayen inte skickar ett timeout-fel innan klienten skickar en ping. Annars utlöser det här villkoret ett 1006-fel på klientsidan.
serverdel med stöd för WebSocket
Serverdelen måste ha en HTTP/HTTPS-webbserver som körs på den konfigurerade porten (vanligtvis 80 eller 443) för att WebSocket ska fungera. Det här kravet finns eftersom WebSocket-protokollet kräver att den initiala anslutningen sker via HTTP, med en uppgradering till WebSocket-protokollet angiven i ett huvudfält. I följande exempel visas en rubrik:
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: https://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
En annan orsak till det här kravet är att programgatewayens hälsoavsökning endast stöder HTTP- och HTTPS-protokoll. Om serverdelsservern inte svarar på HTTP- eller HTTPS-avsökningar tar gatewayen bort den från serverdelspoolen.
Nästa steg
När du har lärt dig mer om WebSocket-stöd går du till skapa en programgateway för att komma igång med ett WebSocket-aktiverat webbprogram.