Gestione di utenti connessi e app client: instradamenti $connect e $disconnect
La sezione seguente descrive come utilizzare gli instradamenti $connect e $disconnect per l'API WebSocket.
Argomenti
Instradamento $connect
App client connesse all'API WebSocket inviando una richiesta di aggiornamento WebSocket. Se la richiesta ha esito positivo, la route $connect viene eseguita mentre la connessione viene stabilita.
Poiché la connessione WebSocket è una connessione stateful, puoi configurare l'autorizzazione solo nella route $connect. 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 Configurazione di un'instradamento $connect che richiede un sottoprotocollo WebSocket. -
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
È 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
È possibile accedere alle informazioni di connessione da un'integrazione proxy Lambda nell'evento. Utilizzare un altro Servizio AWS o una funzione AWS Lambda per pubblicare nella 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.
Per passare informazioni di connessione utilizzando un'integrazione proxy
-
È possibile accedere alle informazioni di connessione da un'integrazione non proxy. Configurare la richiesta di integrazione e fornire un modello di richiesta API WebSocket. Il seguente modello di mappatura Velocity Template Language (VTL)
fornisce una richiesta di integrazione. Questa richiesta invia i seguenti dettagli a un'integrazione non proxy: -
ID connessione
-
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 in Gateway API.
Per completare la richiesta di integrazione, impostare
StatusCode: 200per 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. -
Instradamento $disconnect
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.