Administración de usuarios conectados y aplicaciones cliente: rutas $connect y $disconnect - Amazon API Gateway

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Administración de usuarios conectados y aplicaciones cliente: rutas $connect y $disconnect

La ruta $connect

Las aplicaciones cliente se conectan a tu WebSocket API mediante el envío de una solicitud de WebSocket actualización. Si la solicitud se realiza correctamente, la ruta $connect se ejecuta mientras se establece la conexión.

Como la WebSocket conexión es una conexión con estado, solo puedes configurar la autorización en la $connect ruta. AuthN/AuthZse realizará solo en el momento de la conexión.

Hasta que se complete la ejecución de la integración asociada a la ruta $connect, la solicitud de actualización está pendiente y la conexión real no se establece. Si la solicitud $connect da error (por ejemplo, debido a un error de AuthN/AuthZ o de integración), la conexión no se realizará.

nota

Si se produce un error en la autorización en $connect, la conexión no se establece y el cliente recibirá una respuesta 401 o 403.

La configuración de una integración para $connect es opcional. Considere la posibilidad de configurar una integración $connect si:

  • Desea habilitar a los clientes para especificar subprotocolos mediante el campo Sec-WebSocket-Protocol. Para ver código de ejemplo, consulte Configurar una ruta $connect que requiere un subprotocolo WebSocket.

  • Desea recibir una notificación cuando los clientes se conectan.

  • Desea limitar las conexiones o controlar quién se conecta.

  • Desea que el backend envíe mensajes de respuesta a los clientes mediante una URL de devolución de llamada.

  • Desea almacenar los ID de conexión y otra información en una base de datos (por ejemplo, Amazon DynamoDB).

Transmitir información de conexión de la ruta $connect

Puede utilizar integraciones con y sin proxy para transferir información de la ruta $connect a una base de datos u otro Servicio de AWS.

Para transferir información de conexión mediante una integración de proxy

En ese caso, puede acceder a la información de conexión desde una integración de proxy de Lambda. Utilice otra AWS Lambda función Servicio de AWS o función para publicar en la conexión.

La siguiente función de Lambda muestra cómo utilizar el objeto requestContext para registrar el ID de conexión, el nombre de dominio, el nombre de etapa y las cadenas de consulta.

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}

Para transferir información de conexión mediante una integración que no sea de proxy

  • Puede acceder a la información de conexión con una integración que no sea de proxy. Configura la solicitud de integración y proporciona una plantilla de solicitud de WebSocket API. La siguiente plantilla de mapeo Velocity Template Language (VTL) proporciona una solicitud de integración. Esta solicitud envía los siguientes detalles a una integración que no sea de proxy:

    • ID de la conexión

    • Nombre del dominio

    • Nombre de la fase

    • Ruta

    • Encabezados

    • Cadenas de consulta

    Esta solicitud envía el ID de conexión, el nombre de dominio, el nombre de etapa, las rutas, los encabezados y las cadenas de consulta a una integración que no sea de proxy.

    { "connectionId": "$context.connectionId", "domain": "$context.domainName", "stage": "$context.stage", "params": "$input.params()" }

    Para obtener más información sobre la configuración de transformaciones de datos, consulte Configuración de transformaciones de datos para las API de WebSocket.

    Para completar la solicitud de integración, establezca StatusCode: 200 para la respuesta de integración. Para obtener más información sobre la configuración de una respuesta de integración, consulte Configuración de una respuesta de integración mediante la consola de API Gateway.

La ruta $disconnect

La ruta $disconnect se ejecuta una vez que se ha cerrado la conexión.

La conexión la puede cerrar el servidor o el cliente. Como la conexión ya está cerrada cuando se ejecuta, $disconnect es un evento de mejor esfuerzo. API Gateway hará todo lo posible para entregar el evento $disconnect a su integración, pero no puede garantizar la entrega.

El backend puede iniciar la desconexión mediante la API @connections. Para obtener más información, consulte Uso de comandos de @connections en el servicio de backend.