Verwalten von verbundenen Benutzern und Client-Apps: $connect
- und $disconnect
-Routen
Im folgenden Abschnitt wird beschrieben, wie Sie die $connect
- und $disconnect
-Routen für Ihre WebSocket-API verwenden.
Themen
Die Route $connect
Client-Apps verbinden sich durch Senden einer WebSocket-Upgrade-Anforderung mit Ihrer WebSocket-API. Wenn die Anforderung erfolgreich ist, wird die Route $connect
ausgeführt, während die Verbindung hergestellt wird.
Da die WebSocket-Verbindung eine zustandsbehaftete Verbindung ist, können Sie eine Autorisierung nur für die Route $connect
konfigurieren. AuthN
/AuthZ
werden nur zur Verbindungszeit ausgeführt.
Solange die Integration im Zusammenhang mit der Route $connect
noch nicht abgeschlossen wurde, steht die Upgrade-Anforderung noch an und die tatsächliche Verbindung wird nicht hergestellt. Wenn die $connect
-Anforderung fehlschlägt (z. B. aufgrund eines AuthN
/AuthZ
-Fehlers oder eines Integrationsfehlers), wird die Verbindung nicht hergestellt.
Anmerkung
Wenn die Autorisierung für $connect
fehlschlägt, wird keine Verbindung hergestellt, und der Client erhält eine 401
- oder 403
-Antwort.
Das Einrichten einer Integration für $connect
ist optional. Sie sollten die Einrichtung einer $connect
-Integration unter folgenden Umständen erwägen:
-
Sie möchten Clients ermöglichen, Unterprotokolle mithilfe des
Sec-WebSocket-Protocol
-Felds anzugeben. Beispielcode finden Sie unter Eine $connect-Route einrichten, die ein WebSocket-Unterprotokoll erfordert. -
Sie möchten benachrichtigt werden, wenn Clients verbunden werden.
-
Wenn Sie Verbindungen drosseln möchten oder wenn Sie steuern möchten, wer eine Verbindung herstellt.
-
Wenn Sie möchten, dass Ihr Backend über eine Rückruf-URL Nachrichten an Clients zurücksendet.
-
Sie möchten jede Verbindungs-ID und andere Informationen in einer Datenbank (z. B. Amazon DynamoDB) speichern.
Verbindungsinformationen von der $connect
-Route übergeben
Sie können sowohl Proxy- als auch Nicht-Proxy-Integrationen verwenden, um Informationen von der $connect
-Route an eine Datenbank oder einen anderen AWS-Service zu übergeben.
So übergeben Sie Verbindungsinformationen mithilfe einer Proxy-Integration
In diesem Fall können Sie über eine Lambda-Proxy-Integration auf die Verbindungsinformationen zugreifen. Verwenden Sie einen anderen AWS-Service oder eine andere AWS Lambda-Funktion, um Beiträge an die Verbindung zu senden.
Die folgende Lambda-Funktion zeigt, wie das requestContext
-Objekt verwendet wird, um die Verbindungs-ID, den Domänennamen, den Stufennamen und die Abfragezeichenfolgen zu protokollieren.
So übergeben Sie Verbindungsinformationen mithilfe einer Nicht-Proxy-Integration
-
Sie können mit einer Nicht-Proxy-Integration auf die Verbindungsinformationen zugreifen. Richten Sie die Integrationsanfrage ein und stellen Sie eine WebSocket-API-Anforderungsvorlage bereit. Die folgende Zuordnungsvorlage der Velocity Template Language (VTL)
enthält eine Integrationsanforderung. Diese Anforderung sendet die folgenden Details an eine Nicht-Proxy-Integration: -
Verbindungs-ID
-
Domainname
-
Stufenname
-
Pfad
-
Überschriften
-
Abfragezeichenfolgen
Diese Anforderung sendet die Verbindungs-ID, den Domain-Namen, den Namen der Phase, die Pfade, Header und Abfragezeichenfolgen an eine Nicht-Proxy-Integration.
{ "connectionId": "$context.connectionId", "domain": "$context.domainName", "stage": "$context.stage", "params": "$input.params()" }
Weitere Informationen zum Einrichten von Datenübertragungen finden Sie unterDatentransformationen für WebSocket-APIs in API Gateway.
Zum Abschließen der Integrationsanforderung legen Sie die Integrationsantwort
StatusCode: 200
fest. Weitere Informationen zum Einrichten einer Integrationsantwort finden Sie unter Integrationsantwort mit der API Gateway-Konsole einrichten. -
Die Route $disconnect
Die Route $disconnect
wird ausgeführt, nachdem die Verbindung geschlossen wurde.
Die Verbindung kann vom Server oder vom Client geschlossen werden. Da die Verbindung bereits geschlossen ist, wenn sie ausgeführt wird, ist $disconnect
ein "Best Effort"-Ereignis. API Gateway wird sich nach bemühen, das $disconnect
-Ereignis an Ihre Integration zu übermitteln, kann aber die Übermittlung nicht garantieren.
Das Backend kann die Verbindungstrennung mithilfe der @connections
-API einleiten. Weitere Informationen finden Sie unter Verwenden der @connections-Befehle in Ihrem Backend-Service.