Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Application Gateway biedt systeemeigen ondersteuning voor WebSocket voor alle gatewaygrootten. Er is geen door de gebruiker configureerbare instelling om selectief WebSocket-ondersteuning in of uit te schakelen.
Het WebSocket-protocol, dat is gestandaardiseerd in RFC6455, maakt full-duplexcommunicatie tussen een server en een client mogelijk via een langdurige TCP-verbinding. Deze functie maakt een interactievere communicatie mogelijk tussen de webserver en de client, die bidirectioneel kan zijn zonder dat polling is vereist in implementaties op basis van HTTP. WebSocket heeft weinig overhead in tegenstelling tot HTTP en kan dezelfde TCP-verbinding opnieuw gebruiken voor meerdere aanvragen/antwoorden, wat resulteert in een efficiënter gebruik van resources. WebSocket-protocollen zijn ontworpen om te werken via traditionele HTTP-poorten van 80 en 443. Application Gateway ondersteunt maximaal 30.000 gelijktijdige WS-verbindingen en 13.500 WSS-verbindingen per exemplaar.
U kunt een standaard HTTP-listener blijven gebruiken op poort 80 of 443 om WebSocket-verkeer te ontvangen. WebSocket-verkeer wordt vervolgens doorgestuurd naar de back-endserver waarvoor WebSocket is ingeschakeld met behulp van de juiste back-endpool, zoals opgegeven in regels voor toepassingsgateway. De back-endserver moet reageren op de sondes van de Application Gateway, die worden beschreven in de sectie overzicht van statustests. Statuscontroles voor de Application Gateway maken alleen gebruik van HTTP/HTTPS. Elke backendserver moet reageren op HTTP-sondes zodat Application Gateway WebSocket-verkeer naar die server kan routeren.
Het wordt gebruikt in apps die profiteren van snelle, realtime communicatie, zoals chatten, dashboard en game-apps.
Hoe werkt WebSocket?
Om een WebSocket-verbinding tot stand te brengen, wordt er een specifieke OP HTTP gebaseerde handshake uitgewisseld tussen de client en de server. Als dit lukt, wordt het protocol voor de toepassingslaag bijgewerkt van HTTP naar WebSockets, met behulp van de eerder tot stand gebrachte TCP-verbinding. Zodra dit gebeurt, is HTTP volledig uit de afbeelding; gegevens kunnen worden verzonden of ontvangen met behulp van het WebSocket-protocol door beide eindpunten, totdat de WebSocket-verbinding is gesloten.
Opmerking
Nadat een verbinding is geüpgraded naar WebSocket, als intermediaire/afsluitproxy, verzendt Application Gateway de gegevens die van de front-end naar de back-end zijn ontvangen en vice versa, zonder inspectie- of manipulatiemogelijkheden. Daarom kan de Web Application Firewall (WAF) geen inhoud parseren en geen inspecties uitvoeren op dergelijke gegevens. Op dezelfde manier zijn bewerkingen zoals herschrijven van headers, URL-herschrijven of overschrijven van hostnaam in de back-endinstellingen niet van toepassing na het tot stand brengen van een WebSocket-verbinding.
Listenerconfiguratie-element
Een bestaande HTTP-listener kan worden gebruikt ter ondersteuning van WebSocket-verkeer. In het volgende codefragment ziet u een httpListeners element uit een voorbeeldsjabloonbestand. U hebt zowel HTTP- als HTTPS-listeners nodig om WebSocket te ondersteunen en WebSocket-verkeer te beveiligen. Op dezelfde manier kunt u de portal of Azure PowerShell gebruiken om een toepassingsgateway te maken met listeners op poort 80 en 443 ter ondersteuning van WebSocket-verkeer.
"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",
}
}
],
Configuratie van BackendAddressPool, BackendHttpSetting en routeringsregel
Gebruik een BackendAddressPool om een back-endpool te definiëren met WebSocket-servers. Definieer de backendHttpSetting met back-endpoorten 80 en 443. De time-outwaarde van de aanvraag in HTTP-instellingen is ook van toepassing op de WebSocket-sessie. U hoeft de routeringsregel niet te wijzigen, die de juiste listener koppelt aan de bijbehorende back-endadresgroep.
"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')]"
}
}
}]
Opmerking
Zorg ervoor dat uw time-outwaarde groter is dan het door de server gedefinieerde ping/pong-interval om time-outfouten te voorkomen voordat een ping vanaf de client wordt verzonden. Een typische waarde voor een WebSocket is 20 seconden, dus een time-outwaarde van 40 seconden zorgt ervoor dat de gateway geen time-outfout verzendt voordat de client een ping verzendt. Anders genereert deze voorwaarde een 1006-fout aan de clientzijde.
Back-end met WebSocket ingeschakeld
Uw back-end moet een HTTP/HTTPS-webserver hebben die wordt uitgevoerd op de geconfigureerde poort (meestal 80 of 443) om WebSocket te laten werken. Deze vereiste bestaat omdat het WebSocket-protocol vereist dat de eerste handshake HTTP is met een upgrade naar het WebSocket-protocol als headerveld. In het volgende voorbeeld ziet u een koptekst:
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
Een andere reden voor deze voorwaarde is dat de statusprobe voor de back-end van Application Gateway alleen de HTTP- en HTTPS-protocollen ondersteunt. Als de back-endserver niet reageert op HTTP- of HTTPS-tests, verwijdert de gateway deze uit de back-endpool.
Volgende stappen
Nadat u meer hebt geleerd over websocket-ondersteuning, gaat u naar een toepassingsgateway om aan de slag te gaan met een webtoepassing met WebSocket-functionaliteit.