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à.
Utilizzo di comandi @connections nel servizio di back-end
Il servizio di back-end può utilizzare le seguenti richieste HTTP di connessione WebSocket per inviare un messaggio di callback a un client connesso, ottenere informazioni di connessione o scollegare il client.
Importante
Queste richieste utilizzano l’autorizzazione IAM, pertanto occorre firmarle con Signature Version 4 (SigV4). Per eseguire questa operazione, puoi utilizzare l'API di gestione di API Gateway. Per ulteriori informazioni, consulta ApiGatewayManagementApi
Nel comando seguente, è necessario sostituire con l'ID API effettivo, che viene visualizzato nella console Gateway API o restituito dal comando create-api di AWS CLI. È necessario stabilire la connessione prima di utilizzare questo comando. {api-id}
Per inviare un messaggio di callback al client, utilizza:
POST https://{api-id}.execute-api.us-east-1.amazonaws.com/{stage}/@connections/{connection_id}
Puoi testare questa richiesta utilizzando Postman o chiamando awscurl come nell'esempio seguente:
awscurl --service execute-api -X POST -d "hello world" https://{prefix}.execute-api.us-east-1.amazonaws.com/{stage}/@connections/{connection_id}
Il comando deve essere codificato tramite URL come nell'esempio seguente:
awscurl --service execute-api -X POST -d "hello world" https://aabbccddee.execute-api.us-east-1.amazonaws.com/prod/%40connections/R0oXAdfD0kwCH6w%3D
Per ottenere l'ultimo stato di connessione del client, utilizza:
GET https://{api-id}.execute-api.us-east-1.amazonaws.com/{stage}/@connections/{connection_id}
Per scollegare il client, utilizza:
DELETE https://{api-id}.execute-api.us-east-1.amazonaws.com/{stage}/@connections/{connection_id}
Puoi creare dinamicamente un URL di callback utilizzando le variabili $context nell'integrazione. Ad esempio, se si utilizza un'integrazione proxy Lambda con una funzione Lambda Node.js, puoi creare l'URL e inviare un messaggio a un client connesso come segue:
import { ApiGatewayManagementApiClient, PostToConnectionCommand, } from "@aws-sdk/client-apigatewaymanagementapi"; export const handler = async (event) => { const domain = event.requestContext.domainName; const stage = event.requestContext.stage; const connectionId = event.requestContext.connectionId; const callbackUrl = `https://${domain}/${stage}`; const client = new ApiGatewayManagementApiClient({ endpoint: callbackUrl }); const requestParams = { ConnectionId: connectionId, Data: "Hello!", }; const command = new PostToConnectionCommand(requestParams); try { await client.send(command); } catch (error) { console.log(error); } return { statusCode: 200, }; };
Se utilizzi un nome di dominio personalizzato per l'API WebSocket, rimuovi la variabile stage dal codice della funzione.
Quando si invia un messaggio di callback, la funzione Lambda deve disporre dell'autorizzazione per chiamare l'API di gestione di Gateway API. Se pubblichi un messaggio prima che venga stabilita la connessione o dopo la disconnessione del client, potresti ricevere un errore contenente GoneException.