

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Gestione di utenti connessi e app client: instradamenti `$connect` e `$disconnect`
<a name="apigateway-websocket-api-route-keys-connect-disconnect"></a>

La sezione seguente descrive come utilizzare `$connect` e i `$disconnect` percorsi per la tua WebSocket API.

**Topics**
+ [Instradamento `$connect`](#apigateway-websocket-api-routes-about-connect)
+ [Passaggio delle informazioni di connessione dalla route `$connect`](#apigateway-websocket-api-passing-connectionId-on-connect)
+ [Instradamento `$disconnect`](#apigateway-websocket-api-routes-about-disconnect)

## Instradamento `$connect`
<a name="apigateway-websocket-api-routes-about-connect"></a>

Le app client si connettono alla tua WebSocket API inviando una richiesta di WebSocket aggiornamento. Se la richiesta ha esito positivo, la route `$connect` viene eseguita mentre la connessione viene stabilita.

Poiché la WebSocket connessione è una connessione con stato, puoi configurare l'autorizzazione solo sulla `$connect` route. `AuthN`/`AuthZ`verrà eseguito solo al momento della connessione.

Finché l'esecuzione dell'integrazione associata alla route `$connect` non viene completata, la richiesta di aggiornamento è in sospeso e la connessione effettiva non verrà stabilita. Se la richiesta `$connect` ha esito negativo (ad esempio, a causa di un errore `AuthN`/`AuthZ` o errore di integrazione), la connessione non verrà stabilita.

**Nota**  
Se l'autorizzazione ha esito negativo su `$connect`, la connessione non verrà stabilita e il client riceverà una risposta `401` o `403`.

La configurazione di un'integrazione per `$connect` è facoltativa. È opportuno valutare la configurazione di un'integrazione `$connect` se:
+ Si desidera consentire ai client di specificare sottoprotocolli utilizzando il campo `Sec-WebSocket-Protocol`. Per il codice di esempio, consulta [Imposta una `$connect` route che richiede un WebSocket sottoprotocollo](websocket-connect-route-subprotocol.md).
+ Desideri ricevere una notifica in caso di connessione dei client.
+ Desideri limitare le connessioni o controllare chi si connette.
+ Desideri che il back-end invii messaggi ai client utilizzando un URL di callback.
+ Desideri archiviare ogni ID connessione e altre informazioni in un database (ad esempio Amazon DynamoDB).

## Passaggio delle informazioni di connessione dalla route `$connect`
<a name="apigateway-websocket-api-passing-connectionId-on-connect"></a>

 È possibile utilizzare integrazioni proxy e non proxy per passare informazioni dall'instradamento `$connect` a un database o a un altro Servizio AWS. 

### Per passare le informazioni di connessione utilizzando un'integrazione proxy
<a name="websocket-connect-proxy-integration"></a>

È possibile accedere alle informazioni di connessione da un'integrazione proxy Lambda nell'evento. Usa un'altra AWS Lambda funzione Servizio AWS or per postare sulla connessione. 

La seguente funzione Lambda mostra come utilizzare l'oggetto `requestContext` per registrare l'ID di connessione, il nome di dominio, il nome della fase e le stringhe di query. 

------
#### [ Node.js ]

```
 export const handler = async(event, context) => {
    const connectId = event["requestContext"]["connectionId"]
    const domainName = event["requestContext"]["domainName"]
    const stageName = event["requestContext"]["stage"]
    const qs = event['queryStringParameters']
    console.log('Connection ID: ', connectId, 'Domain Name: ', domainName, 'Stage Name: ', stageName, 'Query Strings: ', qs )
    return {"statusCode" : 200}
};
```

------
#### [ Python ]

```
import json
import logging
logger = logging.getLogger()
logger.setLevel("INFO")


def lambda_handler(event, context):
    connectId = event["requestContext"]["connectionId"]
    domainName = event["requestContext"]["domainName"]
    stageName = event["requestContext"]["stage"]
    qs = event['queryStringParameters']
    connectionInfo = {
        'Connection ID': connectId,
        'Domain Name': domainName,
        'Stage Name': stageName,
        'Query Strings': qs}
    logging.info(connectionInfo)
    return {"statusCode": 200}
```

------

### Per passare informazioni di connessione utilizzando un'integrazione proxy
<a name="websocket-connect-non-proxy-integration"></a>
+ È possibile accedere alle informazioni di connessione da un'integrazione non proxy. Configura la richiesta di integrazione e fornisci un modello di richiesta WebSocket API. Il seguente modello di mappatura [Velocity Template Language (VTL)](https://velocity.apache.org/engine/devel/vtl-reference.html) fornisce una richiesta di integrazione. Questa richiesta invia i seguenti dettagli a un'integrazione non proxy: 
  + ID connessione
  + Domain name (Nome dominio)
  + Nome fase
  + Path
  + Headers
  + Stringhe di query

  Questa richiesta invia l'ID di connessione, il nome di dominio, il nome della fase i percorsi, le intestazioni e le stringhe di query a un'integrazione non proxy.

  ```
  {
      "connectionId": "$context.connectionId",
      "domain": "$context.domainName",
      "stage": "$context.stage",
      "params": "$input.params()"
  }
  ```

  Per ulteriori informazioni sulla configurazione delle trasformazioni di dati, consulta [Trasformazioni dei dati per API WebSocket APIs Gateway](websocket-api-data-transformations.md).

  Per completare la richiesta di integrazione, impostare `StatusCode: 200` per la risposta di integrazione. Per ulteriori informazioni sulla configurazione di una risposta di integrazione, consulta [Configurazione di una risposta di integrazione mediante la console API Gateway](apigateway-websocket-api-integration-responses.md#apigateway-websocket-api-integration-response-using-console).

## Instradamento `$disconnect`
<a name="apigateway-websocket-api-routes-about-disconnect"></a>

La route `$disconnect` viene eseguita dopo la chiusura della connessione.

La connessione può essere chiusa dal server o dal client. Poiché la connessione è già chiusa quando viene eseguita, `$disconnect` è un evento best-effort. API Gateway farà il massimo per consegnare l'evento `$disconnect` all'integrazione, ma non può garantire la consegna.

Il back-end è in grado di avviare la disconnessione utilizzando l'API `@connections`. Per ulteriori informazioni, consulta [Utilizzo di comandi `@connections` nel servizio di back-end](apigateway-how-to-call-websocket-api-connections.md).