Gestisci gli utenti connessi e le app client: $connect e $disconnect i percorsi - Amazon API Gateway

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à.

Gestisci gli utenti connessi e le app client: $connect e $disconnect i percorsi

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

Instradamento $connect

Le app client si connettono al tuo 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/AuthZverrà 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 Configura una $connect route che richiede un WebSocket sottoprotocollo.

  • Desideri ricevere una notifica in caso di connessione dei client.

  • Desideri limitare le connessioni o controllare chi si connette.

  • Vuoi che il tuo backend invii messaggi ai clienti utilizzando un callbackURL.

  • 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. Usa un'altra AWS Lambda funzione Servizio AWS o 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

  • È possibile accedere alle informazioni di connessione da un'integrazione non proxy. Imposta la richiesta di integrazione e fornisci un modello di WebSocket API richiesta. 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 le API in WebSocket API Gateway.

    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 Imposta una risposta di integrazione utilizzando 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. APIGateway farà del suo meglio per fornire l'$disconnectevento necessario all'integrazione, ma non può garantire la consegna.

Il backend può avviare la disconnessione utilizzando. @connections API Per ulteriori informazioni, consulta Utilizzo di comandi @connections nel servizio di back-end.