Az Application Gateway WebSocket-támogatásának áttekintése
Az Application Gateway natív támogatást nyújt a WebSockethez minden átjáróméret esetében. Kizárólag WebSocket-támogatásra vonatkozó felhasználói beállítás nem létezik.
A RFC6455 szabványosított WebSocket protokoll teljes kétirányú kommunikációt tesz lehetővé egy kiszolgáló és egy ügyfél között egy hosszú ideig futó TCP-kapcsolaton keresztül. Ez a funkció interaktívabb kommunikációt tesz lehetővé a webkiszolgáló és az ügyfél között, ami kétirányú lehet anélkül, hogy a HTTP-alapú implementációkban szükség lenne a lekérdezésre. A WebSocket a HTTP-vel ellentétben alacsony többletterheléssel rendelkezik, és ugyanazt a TCP-kapcsolatot több kérelem/válasz esetében is újra felhasználhatja, ami az erőforrások hatékonyabb kihasználását eredményezi. A WebSocket protokollok úgy vannak kialakítva, hogy a hagyományos 80-443-ból álló HTTP-portokon működjenek.
A WebSocket-forgalom fogadásához továbbra is használhat egy szabványos HTTP-figyelőt a 80-s vagy a 443-as porton. A WebSocket-forgalom ezután a WebSocket-kompatibilis háttérkiszolgálóra lesz irányítva az Application Gateway-szabályokban megadott megfelelő háttérkészlet használatával. A háttérkiszolgálónak válaszolnia kell az Application Gateway-mintavételekre, amelyeket az állapotadat-mintavétel áttekintési szakasza ismertet. Az Application Gateway állapottesztjei csak HTTP/HTTPS. Minden háttérkiszolgálónak válaszolnia kell az Application Gateway HTTP-mintavételeire, hogy a WebSocket-forgalmat a kiszolgálóra irányíthassa.
Olyan alkalmazásokban használják, amelyek kihasználják a gyors, valós idejű kommunikációt, például a csevegést, az irányítópultot és a játékalkalmazásokat.
A WebSocket működése
WebSocket-kapcsolat létrehozásához a rendszer egy adott HTTP-alapú kézfogást cserél az ügyfél és a kiszolgáló között. Ha sikeres, az alkalmazásréteg protokollja HTTP-ről WebSocketsre "frissítve" lesz a korábban létrehozott TCP-kapcsolat használatával. Ha ez megtörténik, a HTTP teljesen ki van fogyott a képből; Az adatok a WebSocket protokoll használatával mindkét végponton elküldhetők vagy fogadhatók, amíg a WebSocket-kapcsolat be nem záródik.
Megjegyzés:
A leírtaknak megfelelően a HTTP protokoll csak kézfogás végrehajtására szolgál a WebSocket-kapcsolat létrehozásakor. A kézfogás befejezése után megnyílik egy WebSocket-kapcsolat az adatok továbbításához, és a webalkalmazási tűzfal (WAF) nem tud tartalmat elemezni. Ezért a WAF nem végez ellenőrzéseket az ilyen adatokon.
Figyelő konfigurációs elem
Egy meglévő HTTP-figyelő használható a WebSocket-forgalom támogatásához. A következő egy mintasablonfájlból származó httpListeners-elem kódrészlete. A WebSocket támogatásához és a WebSocket-forgalom biztonságossá tételéhez HTTP- és HTTPS-figyelőkre is szükség van. Hasonlóképpen a portál vagy az Azure PowerShell használatával is létrehozhat egy alkalmazásátjárót a 80/443-as port figyelőivel a WebSocket-forgalom támogatásához.
"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",
}
}
],
BackendAddressPool, BackendHttpSetting és Útválasztási szabály konfigurációja
A BackendAddressPool a WebSocket-kompatibilis kiszolgálókkal rendelkező háttérkészletek definiálására szolgál. AHttpSetting háttérrendszer egy 80-at és 443-at tartalmazó háttérporttal van definiálva. A HTTP-Gépház kérés időtúllépési értéke a WebSocket-munkamenetre is vonatkozik. Nincs szükség módosításra az útválasztási szabályban, amely a megfelelő figyelőt a megfelelő háttércímkészlethez köti.
"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')]"
}
}
}]
Megjegyzés:
Győződjön meg arról, hogy az időtúllépési érték nagyobb, mint a kiszolgáló által megadott ping/pong intervallum, hogy ne tapasztaljon időtúllépési hibákat, mielőtt az ügyfél pingelést küld. A WebSocket tipikus értéke 20 másodperc, így például egy 40 másodperces időtúllépési érték biztosítja, hogy az átjáró ne küldjön időtúllépési hibát, mielőtt az ügyfél pingelést küld; ellenkező esetben 1006-os hiba jelenik meg az ügyféloldalon.
WebSocket-kompatibilis háttérrendszer
A websocket működéséhez a háttérrendszernek http/HTTPS-webkiszolgálóval kell rendelkeznie a konfigurált porton (általában 80/443). Ennek a követelménynek az az oka, hogy a WebSocket protokoll megköveteli, hogy a kezdeti kézfogás HTTP legyen a WebSocket protokollra való frissítéssel fejlécmezőként. Az alábbi példa egy fejlécre mutat:
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
Ennek egy másik oka, hogy az Application Gateway háttérrendszerének állapotadat-mintavétele csak a HTTP- és HTTPS-protokollokat támogatja. Ha a háttérkiszolgáló nem válaszol a HTTP- vagy HTTPS-mintavételekre, a háttérkészletből veszi ki.
Következő lépések
Miután megismerkedett a WebSocket támogatásával, hozzon létre egy Application Gatewayt a WebSocket-kompatibilis webalkalmazás használatának megkezdéséhez.