Gestione di utenti connessi e app client: instradamenti $connect e $disconnect - 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à.

Gestione di utenti connessi e app client: instradamenti $connect e $disconnect

Instradamento $connect

Le app client si connettono all' 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 Configurazione di 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.

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

  • È 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) 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 Configurazione delle trasformazioni dei dati per le API WebSocket .

    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.

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.