Verwalten von verbundenen Benutzern und Client-Apps: $connect- und $disconnect-Routen - Amazon API Gateway

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.

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.

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}

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.