Panoramica del supporto di WebSocket nel gateway dell'applicazioneOverview of WebSocket support in Application Gateway

Il gateway applicazione offre il supporto nativo per WebSocket in tutte le dimensioni di gateway.Application Gateway provides native support for WebSocket across all gateway sizes. Non esistono impostazioni configurabili dall'utente per abilitare o disabilitare in modo selettivo il supporto di WebSocket.There is no user-configurable setting to selectively enable or disable WebSocket support.

Il protocollo WebSocket standardizzato nella specifica RFC6455 consente una comunicazione full duplex tra un server e un client su una connessione TCP con esecuzione prolungata.WebSocket protocol standardized in RFC6455 enables a full duplex communication between a server and a client over a long running TCP connection. Questa funzionalità consente una comunicazione più interattiva tra il server Web e il client, che può essere bidirezionale senza che sia necessario il polling richiesto invece nelle implementazioni basate su HTTP.This feature allows for a more interactive communication between the web server and the client, which can be bidirectional without the need for polling as required in HTTP-based implementations. A differenza del protocollo HTTP, WebSocket presenta un overhead ridotto e può riusare la stessa connessione TCP per più richieste/risposte garantendo così un utilizzo più efficiente delle risorse.WebSocket has low overhead unlike HTTP and can reuse the same TCP connection for multiple request/responses resulting in a more efficient utilization of resources. I protocolli WebSocket sono progettati per usare le porte HTTP 80 e 443 tradizionali.WebSocket protocols are designed to work over traditional HTTP ports of 80 and 443.

È possibile continuare a usare un listener HTTP standard nella porta 80 o 443 per ricevere il traffico WebSocket.You can continue using a standard HTTP listener on port 80 or 443 to receive WebSocket traffic. Il traffico WebSocket viene quindi indirizzato al server back-end abilitato per WebSocket usando il pool back-end appropriato, come specificato nelle regole del gateway applicazione.WebSocket traffic is then directed to the WebSocket enabled backend server using the appropriate backend pool as specified in application gateway rules. Il server back-end deve rispondere ai probe del gateway applicazione, descritti nella sezione di panoramica dei probe di integrità.The backend server must respond to the application gateway probes, which are described in the health probe overview section. I probe di integrità del gateway applicazione sono solo HTTP e HTTPS.Application gateway health probes are HTTP/HTTPS only. Ogni server back-end deve rispondere a probe HTTP per il gateway applicazione per instradare il traffico WebSocket al server.Each backend server must respond to HTTP probes for application gateway to route WebSocket traffic to the server.

Elemento di configurazione del listenerListener configuration element

Per supportare il traffico WebSocket è possibile usare un listener HTTP esistente.An existing HTTP listener can be used to support WebSocket traffic. Di seguito è riportato il frammento dell'elemento httpListeners di un file modello di esempio.The following is a snippet of an httpListeners element from a sample template file. Per supportare WebSocket e il traffico WebSocket sicuro saranno necessari listener sia HTTP che HTTPS.You would need both HTTP and HTTPS listeners to support WebSocket and secure WebSocket traffic. Per creare un gateway applicazione con listener sulla porta 80/443 per supportare il traffico WebSocket, è possibile usare in modo analogo il portale o PowerShell.Similarly you can use the portal or PowerShell to create an application gateway with listeners on port 80/443 to support WebSocket traffic.

"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",
            }
        }
    ],

Configurazione di BackendAddressPool, BackendHttpSetting e della regola di routingBackendAddressPool, BackendHttpSetting, and Routing rule configuration

BackendAddressPool viene usato per definire un pool back-end con server abilitati per WebSocket.A BackendAddressPool is used to define a backend pool with WebSocket enabled servers. backendHttpSetting è definito con una porta back-end 80 e 443.The backendHttpSetting is defined with a backend port 80 and 443. Le proprietà per l'affinità basata su cookie e requestTimeouts non sono rilevanti per il traffico WebSocket.The properties for cookie-based affinity and requestTimeouts are not relevant to WebSocket traffic. Non è necessaria alcuna modifica nella regola di routing. Viene usato 'Basic' per collegare il listener appropriato al pool di indirizzi back-end corrispondente.There is no change required in the routing rule, 'Basic' is used to tie the appropriate listener to the corresponding backend address pool.

"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')]"
        }

    }
}]

Back-end abilitato per WebSocketWebSocket enabled backend

Per il funzionamento di WebSocket, è necessario che il back-end includa un server Web HTTP/HTTPS in esecuzione sulla porta configurata (in genere 80/443).Your backend must have a HTTP/HTTPS web server running on the configured port (usually 80/443) for WebSocket to work. Il protocollo WebSocket richiede infatti un handshake iniziale HTTP con un campo di intestazione Upgrade per il protocollo WebSocket.This requirement is because WebSocket protocol requires the initial handshake to be HTTP with upgrade to WebSocket protocol as a header field. Di seguito è riportato un esempio di intestazione:The following is an example of a header:

    GET /chat HTTP/1.1
    Host: server.example.com
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
    Origin: http://example.com
    Sec-WebSocket-Protocol: chat, superchat
    Sec-WebSocket-Version: 13

Un altro motivo risiede nel fatto che il probe di integrità del back-end del gateway applicazione supporta solo i protocolli HTTP e HTTPS.Another reason for this is that application gateway backend health probe supports HTTP and HTTPS protocols only. Se il server back-end non risponde ai probe HTTP o HTTPS, il server viene escluso dal pool back-end.If the backend server does not respond to HTTP or HTTPS probes, it is taken out of backend pool.

Passaggi successiviNext steps

Dopo aver acquisito familiarità con il supporto di WebSocket, creare un gateway applicazione per iniziare a usare un'applicazione Web abilitata per WebSocket.After learning about WebSocket support, go to create an application gateway to get started with a WebSocket enabled web application.