Come posso risolvere gli errori 410 GoneException con le API WebSocket di Gateway Amazon API?

Ultimo aggiornamento: 03/11/2022

Quando provo a pubblicare un messaggio sulla mia API WebSocket di Gateway Amazon API, ricevo un errore "410 GoneException" simile al seguente:

...
"errorMessage": "GoneException: 410" 
...

In che modo posso risolvere il problema?

Breve descrizione

Potresti ricevere l'errore "410 GoneException" se:

  • All'API WebSocket è stato inviato un messaggio prima che la connessione fosse stabilita.
  • La connessione è stata interrotta o non esiste più.
  • Il client si è disconnesso e ha successivamente provato a riconnettersi utilizzando lo stesso connectionId.

Nota: per le API WebSocket, per inviare una risposta di callback dal back-end è necessario il connectionId.

Risoluzione

Per risolvere gli errori dell'API WebSocket, attiva File di log Amazon CloudWatch.

Nota: per Log level (Livello di registro), scegli INFO per generare registri di esecuzione per tutte le richieste.

I registri di esecuzione contengono informazioni che è possibile utilizzare per identificare e risolvere la maggior parte degli errori delle API. Ad esempio:

Per ulteriori informazioni su ciascun tipo di registrazione, consulta i formati di registro di CloudWatch per Gateway API.

Prima di inviare messaggi alle API WebSocket, assicurati che la connessione sia stabilita richiamando l'operazione getConnection tramite l'SDK AWS ApiGatewayManagementApi.

Evita di effettuare la richiesta postToConnection dalla funzione Lambda integrata con la route $connect. Ad esempio, se desideri inviare un messaggio dopo avere stabilito la connessione client, procedi come segue:

  1. Crea una funzione Lambda secondaria richiamata in modo asincrono dalla funzione principale.
  2. All'avvio di una nuova connessione, viene richiamata la route $connect e la funzione principale richiama la funzione secondaria passando il connectionId.
  3. La funzione secondaria Lambda riceve il connectionId e richiama l'operazione getConnection per verificare che la connessione sia valida. Dopodiché, il messaggio viene inviato utilizzando il metodo postToConnection.